我正在嘗試編寫一些類的測試。我想要測試的類使用不同的存儲庫來從我的數據庫中獲取和保存內容。單元測試用存根和模擬
一個簡單的例子
public class MyClass
{
private readonly IGroupRepository _groupRepo;
public MyClass(IGroupRepository groupRepo){
_groupRepo = groupRepo;
}
public void Execute(PersonInfo personInfo, string id){
var group = _groupRepo.GetById(id);
var person = group.Persons.First(p=> p.Id == personInfo.Id);
person.FirstName = personInfo.FirstName;
person.LastName = personInfo.LastName;
_groupRepo.Save(group);
}
}
我想要做的就是確保內容被保存到數據庫是正確的。
所以我有這樣的一個單元測試:
[TestMethod]
public void TestMethod(){
var groupId = "ABC";
var personId = 1;
ver personInfo = new PersonInfo()
{
Id = personId,
FirstName = "Sam",
LastName = "Smith"
}
var groupStub = new Mock<IGroupRepository>;
groupStub.Setup(x=> x.GetById(groupId)).Returns(new Group(){
Id = groupId,
Persons = List<Person>()
{
new Person()
{
Id = personId,
FirstName = "George",
LastName = "Bolton",
}
}
}
});
var myClass = new MyClass();
myClass.Execute(personInfo, groupId);
var group = groupStub.GetById(groupId);
var person = group.Persons.First(p=> p.Id == personId);
Assert.AreEqual(personInfo.FirstName, person.FirstName);
}
我認爲這是很好,但後來我讀多了起來就可以了,我看你不應該斷言在子,其我想我在我的斷言中做了什麼?我從存根中獲取信息,然後在結果上使用Assert?
所以我不確定這是否是正確的測試方法。如果沒有,爲什麼和什麼是正確的方法?