2015-05-14 5 views
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>();

ответ

1

Не проверять внутренности тестируемого устройства; вместо этого проверьте его последствия.

Одно выражение делает то, что другое не имеет: оно обновляет другое свойство. Убедитесь, что это свойство обновлено.

 Смежные вопросы

  • Нет связанных вопросов^_^