Arrange Act Assert Альтернативы

Общий вопрос: есть ли альтернативные модели AAA для модульного тестирования? Если да, было бы очень интересно увидеть некоторые примеры и услышать об их плюсах и минусах.

И в качестве простейшего примера теста AAA (в C# для простоты используется var):

// Arranging
var annualSalary = 120000M;
var period = 3; // for a quarter profit
var calc = new SalaryCalculator();

// Acting
var result = calc.CalculateProfit(annualSalary, period); 

// Assertion
Assert.IsEqual(40000, result);

5 ответов

Мне нравится то, что является не столько альтернативой ААА, сколько вариацией. Я думаю об этом как Arrange-Assert (not) -Act-Assert, но другие называют это ЗащитнымУтверждением. Идея состоит в том, чтобы иметь утверждение, гарантирующее, что желаемый результат Закона еще не представлен до акта. Здесь есть хорошее обсуждение этого.

Есть еще одна нотация, основанная на поведенческом развитии: дано - когда - тогда. Примеры для C# - это SpecFlow, а для Jasmin - для JavaScript. Оба ресурса полны примеров использования этой записи. Подход GWT обычно используется в разработке, управляемой поведением, и в аспектно-ориентированном программировании.

Некоторые из самых ранних фальшивых фреймворков (по крайней мере, в мире.Net) заставили вас использовать шаблон записи / воспроизведения. Я говорю "сила", потому что я не нахожу это очень естественным или читабельным, и тогда не было альтернативы.

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

Когда вы используете параметризованное тестирование, то часто вы можете перемещать "аранжировку" или "заданную" часть в параметры. но все же принцип остается

Другой распространенный шаблон, используемый в модульном тестировании, - это шаблон четырехфазного тестирования:

  1. Настроить
  2. казнить
  3. Проверьте
  4. Срывать

Первые шаги в основном такие же, как в шаблоне AAA. Тем не менее, я считаю, что Четырехфазный шаблон лучше подходит для языков, где вы должны очистить себя, например, C или C++. Шаг 4 (разрыв) - это когда вы освобождаете любую выделенную память или уничтожаете объекты, созданные для теста.

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

В C++, например, приведенный выше тест может быть:

// Setup
int annualSalary = 120000;
int period = 3; // for a quarter profit
int result;
SalaryCalculator calc = new SalaryCalculator();

// Execute
result = calc.CalculateProfit(annualSalary, period); 

// Check
CHECK_EQUAL(40000, result);

// Teardown
delete calc;
Другие вопросы по тегам