1
我目前正在研究如何更好地用不同的表達測試下面的代碼,其中相同的方法被調用,通過公正的。單元測試:檢查其表達傳遞到方法測試
if (boolResult)
{
service.Update(
x => x.Id == newId && x.Version == version,
x => new Foo
{
FooId = newId,
OtherProp = otherValue
});
}
else if (some other scenario)
{
service.Update(x => x.Id == newId,
x => new Foo
{
FooId = newId
});
}
在單元測試中,我想斷言service.Update
呼叫與預期表達運行。我想實現的是類似下面:
//set up the expressions
Expression<Func<Foo, bool>> expression = x => x.Id == newId && x.Version <= newVersion;
Expression<Func<Foo, Foo>> updateExpression = x => new Foo
{
Id = newId,
OtherProp = otherValue
};
//assert
m_service.AssertWasCalled(x => x.Update(Arg<Expression<Func<Foo, bool>>>.Is.Equal(expression), Arg<Expression<Func<Foo, Foo>>>.Is.Equal(updateExpression)));
這會失敗,但不知道這種做法是否正確,以及如何最好地檢查正確的表述被傳遞給函數。 請注意,在測試中,m_service
是MockRepository.GenerateMock<IService>();