考慮以下的單元測試:什麼時候應該斷言SUT的行爲?
[Test]
public void Success()
{
var userID = 5;
var user = new User();
var dataAccess = new Mock<IDataAccess>();
dataAccess.Setup(x => x.GetUser(userID)).Returns(user).Verifiable();
var sut = new UserController(dataAccess.Object);
var returnedUser = sut.GetUser(userID);
Assert.AreSame(user, returnedUser);
dataAccess.Verify(x => x.GetUser(userID), Times.Once());
}
最近讀數已建議我應該只使用模擬,以提供用戶和應該有一個單一的斷言(所述AreSame之一)。顯然理想的單元測試不應該擔心驗證sut的行爲。
更多類似這樣的:
[Test]
public void Success()
{
var userID = 5;
var user = new User();
var dataAccess = new Mock<IDataAccess>();
dataAccess.Setup(x => x.GetUser(userID)).Returns(user);
var sut = new UserController(dataAccess.Object);
var returnedUser = sut.GetUser(userID);
Assert.AreSame(user, returnedUser);
}
這是簡化的測試更好?單元測試應該斷言它們所調用的方法的行爲還是僅僅是結果?
可能重複的[狀態/相互作用的測試和混亂上混合(或濫用)他們](http://stackoverflow.com/questions/1300221/state-interaction-testing-and - 混淆 - 混合 - 或 - 濫用 - 他們) – 2014-09-03 09:13:02
這是一個很好的背景文章閱讀:http://martinfowler.com/articles/mocksArentStubs.html – 2014-09-03 09:15:03