Вызов Moq не был выполнен на насмешке

Два из моих любимых, которые я редко вижу используемый:

  1. Отрывки (особенно для свойств, который был сделан еще лучше для Visual Studio 2008)
  2. ObsoleteAttribute

5
задан Cœur 27 April 2017 в 16:07
поделиться

4 ответа

Вам необходимо выполнить действие перед вызовом 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());
}

И это правильно, поскольку действие существует:

10
ответ дан 18 December 2019 в 13:17
поделиться

Вы правильно используете 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());
3
ответ дан 18 December 2019 в 13:17
поделиться

Организовать:

Инструктировать ложные объекты, что будет происходить во время теста. Сообщите ему, какие события будут срабатывать, какие методы и свойства будут использоваться и что делать, когда это произойдет.

Действие:

Выполните тестируемый код.

Утвердите:

Спросите фиктивные объекты. если то, что вы сказали им ожидать, действительно произошло. Также проверьте свой код, чтобы убедиться, что он работал так, как вы ожидали.

Ваша проблема в том, что вы упорядочили, а затем подтвердили, не выполняя промежуточных действий. Серия методов Verify утверждает, что то, что вы сказали, произойдет в методах установки, действительно произошло.

1
ответ дан 18 December 2019 в 13:17
поделиться

Спасибо, ребята К сожалению, я новичок во всем этом и пытаюсь выучить быстро. Особенно терминологию «действовать», «организовать» и т. Д.

Так что, хотя я не понимал, что делаю, я сделал это правильно, как

newProduct.Object.Name = " Джо »

устраивал акт.

Фантастическое объяснение, ребята Большое спасибо

И последнее, Я думал, что они будут «настроены и действуют», но это не так, верно? знаете ли вы разницу между двумя SetupProperty и SetupSet / Get

mock.SetupProperty (f => f.Surname, "foo");

mock.SetupSet (foo => foo.Surname = "foo ");

0
ответ дан 18 December 2019 в 13:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: