Подтвердить / Подтвердить все до или после утверждения - PullRequest
2 голосов
/ 26 октября 2010

Я привык следовать шаблону кода при написании теста

public void TestMethod_Condition_Output()
{
    //Arrange----------------
    Mock<x> temp = new Mock<x>();
    temp.setup.......

    //Act--------------------
    classinstance.TestMethod()

   //Assert------------------

   temp.VerifyAll();
   Assert.AreNotEqual(.....)    
}

Я использовал VerifyAll () перед выполнением утверждений. Но в последнее время на некоторых онлайн-примерах я видел, как люди сначала делали Assertion, а затем VerifyAll, если таковые имеются. Я чувствую, что мой путь правильный, если я что-то упустил.

Не могли бы вы предупредить меня, если я что-то упустил.

Ответы [ 2 ]

5 голосов
/ 26 октября 2010

На мой взгляд, подтверждение должно прийти после подтверждений. Я хочу, чтобы утверждения были близки к вызову тестируемого метода, поскольку они документируют, что делает метод. Проверки фиктивных вызовов подробно описывают, как класс использует свои зависимости. Это менее важно связать непосредственно с самим методом.

В некотором смысле, насмешка зависимостей становится оберткой вокруг самого теста. Это делает тест более понятным (для меня, во всяком случае, YMMV). Мои тесты затем следуют этой схеме:

Устройте

  • Ложная
  • Настройка ожиданий для зависимостей
  • Настройка ожидаемых результатов
  • Создать тестируемый класс

Закон

  • вызывать тестируемый метод

Assert

  • Подтвердить фактические результаты соответствуют ожидаемым результатам
  • Убедитесь, что ожидания оправдались

Я не знаю, что я буду педантичен в этом, но этот порядок имеет для меня наибольшее значение.

2 голосов
/ 26 октября 2010

В тестировании стиля AAA я не использую VerifyAll, но вместо того, чтобы проверять, методы были вызваны явно как часть единицы теста. В области Arrange я только настраиваю методы, которые должны возвращать значение.

на примере Rhino ...

//Arrange
mockedInterface.Stub(x => x.SomeMethod1()).Returns(2);

...

//Assert
mockedInterface.AssertWasCalled(x => x.SomeMethod1());
mockedInterface.AssertWasCalled(x => x.SomeMethod2());
Assert.AreEqual(...); // stanmdard NUnit asserttions

Мне не нужно устанавливать ожидаемый вызов SomeMethod2 (), если он ничего не возвращает.

В случае свободных приставок нет необходимости вызывать VerifyAll, так как вызовы других методов не будут проваливаться в тесте (если не требуется возврат, тогда это требуется в разделе Arrange).

Количество утверждений должно быть сведено к минимуму (создайте больше тестов, если оно становится слишком большим), и порядок их не должен иметь большого значения.

...