Упорядочить альтернативные варианты закона

Общий вопрос: Существуют ли альтернативные шаблоны для 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;