2015-05-14 80 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_serviceMockRepository.GenerateMock<IService>();

回答

1

不驗證被測單元的內部;請驗證其效果。

一個表達式做了,其他沒有:它更新的其他財產。驗證此屬性是否已更新。