Рассмотрим следующий тест единицы измерения:Когда я должен утверждать действия 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 один). По-видимому, идеальный модульный тест не должен беспокоиться о проверке поведения сут.
Больше как это:
[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);
}
Это упрощенный тест лучше? Должны ли Unit Tests утверждать поведение методов, которые они называют, или только результаты?
возможно дубликат [государственного тестирования/взаимодействия и путаницы при смешении (или злоупотребление) их] (http://stackoverflow.com/questions/1300221/state-interaction-testing-and -confusion-on-mix-or-abusing-them) –
И это хорошая справочная статья: http://martinfowler.com/articles/mocksArentStubs.html –