Использование шаблона Arrange-Act-Assert (AAA) при написании unit тестов, намного повышает шансы других разработчиков понять Ваш код. Наверняка Вы уже использовали AAA в своих проектах, но не догадывались об этом. Давайте разберемся, что же это за шаблон. Итак, все просто, данный шаблон всего лишь разделяет и группирует код теста на 3 секции, придавая, удобную для чтения, структуру unit теста:
- Arrange — выставление начальных условий.
- Act — отработка тестируемого функционала.
- 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);
}
Хоть мой пример и простой, но мы явно видим плюсы разработки при таком подходе:
- Assert-методы никогда не перемешаются с Act-методами.
- Неявное навязывание писать ОДИН Assert на ОДИН тест.
- Упрощенный рефакторинг, Вам легко будет обнаружить Arrange-блоки, которые можно вынести в SetUp-метод.