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) заставили вас использовать шаблон записи / воспроизведения. Я говорю "сила", потому что я не нахожу это очень естественным или читабельным, и тогда не было альтернативы.
Это породило новую расу изолирующих фреймворков, продвигающих форму ААА, которую я считаю наиболее подходящим для выявления намерений подходом. Подробнее об этом здесь.
Когда вы используете параметризованное тестирование, то часто вы можете перемещать "аранжировку" или "заданную" часть в параметры. но все же принцип остается
Другой распространенный шаблон, используемый в модульном тестировании, - это шаблон четырехфазного тестирования:
- Настроить
- казнить
- Проверьте
- Срывать
Первые шаги в основном такие же, как в шаблоне 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;