Arrange-Act-Assert

Использование шаблона Arrange-Act-Assert (AAA) при написании unit тестов, намного повышает шансы других разработчиков понять Ваш код. Наверняка Вы уже использовали AAA в своих проектах, но не догадывались об этом. Давайте разберемся, что же это за шаблон. Итак, все просто, данный шаблон всего лишь разделяет и группирует код теста на 3 секции, придавая, удобную для чтения, структуру unit теста:

  1. Arrange — выставление начальных условий.
  2. Act — отработка тестируемого функционала.
  3. Assert — сверка ожидаемых значений с полученными.

Приведу простой пример:

// Переводчик.

interface ITranslator

{

 string Translate(string line);

}

 

class EngRusTranslator : ITranslator

{

 public EngRusTranslator(/*Требуем словарь*/)

{

}

 

 public string Translate(string line)

{

 // Здесь у нас есть доступ к словарю               

 // (который надо передавать в

 // качестве аргумента в конструктор),

 // по которому происходит перевод.

 //

 // Но предположим, что он у нас зашит к коде.

 

 throw new NotImplementedException();

}

}

 

[Test]

public void TestTranslate()

{

 // Arrange.

 //

 // Здесь мы можем setup-ить наши Mock объекты,

 // например создать Mock-словарь, который потом

 // передать в качестве аргумента в конструктор.

 ITranslator translator = new EngRusTranslator();

 

 // Act.

 //

 // Отработка тестируемого функционала.

 string result = translator.Translate(«Hello, World!»);

 

 // Assert.

 //

 // Проверка. Assert или Verify метод.

 Assert.AreEqual(«Привет, Мир!», result);

}

 

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

  1. Assert-методы никогда не перемешаются с Act-методами.
  2. Неявное навязывание писать ОДИН Assert на ОДИН тест.
  3. Упрощенный рефакторинг, Вам легко будет обнаружить Arrange-блоки, которые можно вынести в SetUp-метод.