Feel Good.

08 апреля 2010

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-метод.

1 комментарий:

  1. Чтобы не парить голову з кодами и прочей фигнёй я использую премиум темы wordpress, это система управления содержимым сайта с открытым исходным кодом, и разними полезными функциями

    ОтветитьУдалить