Два из моих любимых, которые я редко вижу используемый:
Вам необходимо выполнить действие перед вызовом verify. Типичная парадигма модульного тестирования с фиктивными объектами:
// Arrange
// Act
// Assert
Таким образом, следующее неправильное использование, потому что вы пропустили свой шаг действия:
public void Can_do_something()
{
// Arrange
var newProduct = new Mock<IProduct>();
newProduct.SetupGet(p => p.Name).Returns("Jo");
// Act - doesn't exist!
// Your action against p.Name (ie method call), should occur here
// Assert
// This fails because p.Name has not had an action performed against it
newProduct.VerifySet(p => p.Name, Times.AtLeastOnce());
}
И это правильно, поскольку действие существует:
Вы правильно используете VerifySet (), вы только что пропустили этап // Act из типичной конструкции теста
//Arrange
//Act
//Assert
. Как вы предложили, вставка
newProduct.Object.Name = "Jo";
на этап // Act решает проблему.
VerifyGet () будет использоваться точно так же, например,
//Arrange
var newProduct = new Mock<IProduct>();
newProduct.SetupGet(p => p.Id).Returns(1);
newProduct.SetupGet(p => p.Name).Returns("Jo");
//Act
string productName = newProduct.Object.Name;
//Assert
newProduct.VerifyGet(p => p.Name, Times.AtLeastOnce());
newProduct.Verify () используется для проверки любого указанного вами действия , например,
//Arrange
var newProduct = new Mock<IProduct>();
newProduct.SetupGet(p => p.Id).Returns(1);
newProduct.SetupGet(p => p.Name).Returns("Jo");
//Act
newProduct.Object.SomeMethodYouDefineOnTheProductObject();
//Assert
newProduct.Verify(p => p.SomeMethodYouDefineOnTheProductObject(), Times.AtLeastOnce());
Организовать:
Инструктировать ложные объекты, что будет происходить во время теста. Сообщите ему, какие события будут срабатывать, какие методы и свойства будут использоваться и что делать, когда это произойдет.
Действие:
Выполните тестируемый код.
Утвердите:
Спросите фиктивные объекты. если то, что вы сказали им ожидать, действительно произошло. Также проверьте свой код, чтобы убедиться, что он работал так, как вы ожидали.
Ваша проблема в том, что вы упорядочили, а затем подтвердили, не выполняя промежуточных действий. Серия методов Verify утверждает, что то, что вы сказали, произойдет в методах установки, действительно произошло.
Спасибо, ребята К сожалению, я новичок во всем этом и пытаюсь выучить быстро. Особенно терминологию «действовать», «организовать» и т. Д.
Так что, хотя я не понимал, что делаю, я сделал это правильно, как
newProduct.Object.Name = " Джо »
устраивал акт.
Фантастическое объяснение, ребята Большое спасибо
И последнее, Я думал, что они будут «настроены и действуют», но это не так, верно? знаете ли вы разницу между двумя SetupProperty и SetupSet / Get
mock.SetupProperty (f => f.Surname, "foo");
mock.SetupSet (foo => foo.Surname = "foo ");