В настоящее время я изучаю, как лучше всего проверить приведенный ниже фрагмент кода, где тот же метод вызывается, просто с другим выражением.Ед. Тест: проверьте, какое выражение было передано в метод в тесте
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>();