单元测试:检查在测试中将哪个表达式传递给方法

时间:2015-05-14 11:40:31

标签: c# nunit rhino-mocks

我目前正在研究如何最好地测试下面的代码,只需使用不同的表达式调用相同的方法。

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_serviceMockRepository.GenerateMock<IService>();

1 个答案:

答案 0 :(得分:1)

不要验证被测单元的内部结构;相反,验证其效果。

一个表达式执行另一个表达式:它更新另一个属性。验证此属性是否已更新。