【发布时间】:2014-09-03 09:04:57
【问题描述】:
考虑以下单元测试:
[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);
}
这种简化的测试更好吗?单元测试应该断言它们调用的方法的行为还是只断言结果?
【问题讨论】:
-
这是一篇很好的背景文章:martinfowler.com/articles/mocksArentStubs.html
标签: unit-testing moq