Упорядочить альтернативные варианты закона
Общий вопрос: Существуют ли альтернативные шаблоны для AAA для модульного тестирования?
Если да, было бы очень интересно увидеть некоторые примеры и услышать о своих плюсах и минусах.
И как простейший пример теста AAA (в С#, используя 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);
Ответы
Ответ 1
Мне нравится нечто, что не является альтернативой AAA, а скорее вариацией. Я думаю об этом как Arrange-Assert (not) -Act-Assert, но другие назвали его Guard Assertion. Идея состоит в том, чтобы иметь утверждение, гарантирующее, что желаемый результат Закона еще не представлен перед поступком. Там хорошее обсуждение этого здесь.
Ответ 2
Есть еще одна нотация из Behavior-driven development: С учетом - Когда - Затем. Примеры для С#: SpecFlow и для Jasmin для JavaScript. Оба ресурса полны примеров использования этих обозначений. Подход GWT обычно используется в разработке, ориентированном на поведение и в аспекте ориентированного программирования.
Ответ 3
Некоторые из самых ранних издевательских фреймворков (по крайней мере в мире .Net) заставили вас использовать шаблон Record/Replay. Я говорю силу, потому что я не считаю ее очень естественной или читаемой, и тогда альтернативы не было.
Это породило новую расу изоляционных каркасов, способствующих формированию формы ААА, и я считаю ее наиболее целенаправленным. Подробнее об этом здесь.
Ответ 4
когда вы используете параметризованное тестирование, часто вы можете переместить параметр "arranging" или "given" в параметры. но все же принцип остается
Ответ 5
Другим распространенным шаблоном, используемым при модульном тестировании, является четырехфазный тестовый шаблон:
- Настройка
- Выполнить
- Проверить
- Teardown
Первые шаги по существу такие же, как в шаблоне AAA. Тем не менее, я нахожу, что четырехфазный шаблон лучше подходит для языков, где вы должны очистить себя, например, C или С++. Шаг 4 (teardown) - это то, где вы освобождаете любую выделенную память или уничтожаете объекты, созданные для теста.
В ситуациях, когда вы не выделяете какую-либо память, или сборщик мусора не занимается освобождением, четвертый шаг не используется большую часть времени, поэтому имеет смысл использовать шаблон AAA.
В С++, например, вышеуказанный тест может быть:
// 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;