我目前正在研究如何最好地测试下面的代码,只需使用不同的表达式调用相同的方法。
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>();
答案 0 :(得分:1)
不要验证被测单元的内部结构;相反,验证其效果。
一个表达式执行另一个表达式:它更新另一个属性。验证此属性是否已更新。