【发布时间】:2014-05-10 12:39:20
【问题描述】:
我有一个方法可以将对象添加到数据库,处理该对象,然后如果处理成功,则更新数据库中的同一对象。处理是系统中非常关键的部分(支付),所以我想确保如果在处理过程中系统崩溃/断电,我们仍然有初始添加,然后我们可以再次处理。
public void CreateAndProcess(){
var myObj= new myObj
{
// Set up myObj here
};
db.Add(myObj);
db.SaveChanges();
// Process and update myObj here
db.Update(myObj);
db.SaveChanges();
}
然后我想对 CreateAndProcess 方法进行单元测试,以确保使用包含正确值的 myObj 调用 Add 和 Update 方法。
// addedObj and updatedObj are objects I define in my test that should match.
_store.AssertWasCalled(store => store.Add(Arg<myObj>.Matches(mo => Equal(mo, addedObj))),
option => option.Repeat.Once()); // Initial add to db
_store.AssertWasCalled(store => store.Update(Arg<myObj>.Matches(mo => Equal(mo, updatedObj))),
option => option.Repeat.Once()); // Update in db after processed
private static bool Equal(myObj s1, myObj s2)
{
// Used to match a subset of properties I care about
Assert.That(s1.myProp, Is.EqualTo(s2.myProp), "Unexpected argument");
return true;
}
问题是第一个 AssertWasCalled 使用的是对象更新后的最终状态,而不是调用 Add() 函数时的值。
如何测试 myObj 在最初添加到数据库时的状态?
谢谢,
【问题讨论】:
-
您是否使用 GenerateStub 创建 _store 对象?如果是这样,问题可能与此question 有关
-
是的,我愿意:_store = MockRepostiory.GenerateStub...
标签: c# unit-testing nunit rhino-mocks