2. Организовать, действовать, утверждать
Цели обучения
В этом упражнении вы узнаете о ключевом принципе тестирования единиц AAA (Arrange, Act, Assert), который поможет вам структурировать тестирование единиц.
Введение и мотивация
Концепция Arrange, Act, Assert является промышленным стандартом в тестировании модулей. Она позволяет четко различать код для настройки теста, проведения теста и оценки. Использование этого может сделать ваш тест более читаемым как для вас, так и для ваших коллег.
В первой части кода мы располагаем все элементы, необходимые для теста. В средней части мы действуем на объект, который подвергается тестированию. В последней части мы утверждаем результат части действия. Три части кода обычно разделены пустой строкой.
Пример Arrange, Act, Assert может выглядеть следующим образом:
[Test]
public void StringWriterTest()
{
// Arrange
var stringWriterUnderTest = new StringWriter();
stringWriterUnderTest.NewLine = "\\n";
var testStringA = "I am testing";
var testStringB = "with new line";
// Act
stringWriterUnderTest.WriteLine(testStringA);
stringWriterUnderTest.WriteLine(testStringB);
// Assert
Assert.AreEqual("I am testing\\nwith new line\\n", stringWriterUnderTest.ToString());
}
Хорошей практикой является использование XUnderTest в качестве имени переменной для тестируемого класса. Так тест остаётся сфокусированным.
Часть кода, содержащая утверждение, должна иметь как можно меньше строк, отражающих то, что фактически тестируется. Утверждение в оптимальном случае должно содержать только вызов assert, но также может потребоваться включить некоторые строки логики, чтобы позволить утверждение.
2010 год
Импорт образец 2_ActArrangeAssert в вашу Unity Editor (версия 2019.2 или более новых) от Package Manager окно.
В этом проекте у нас есть класс с именем StringFormatterОн имеет два метода интереса: void Configure(string joinDelimiter) и string Join(object[] args).
Целью этого упражнения является написание одного или нескольких тестов, проверяющих метод Join. Например, проверка того, что он может соединяться с разделителем «;» (точкой с запятой).
Подсказки
- Настройка тестового входа и вызов
Configure(";")будут перенесены вArrangeчасть вашего теста. - Хорошей практикой является разделение трех частей вашего теста (arrange, act и assert) с помощью пустой строки.
Решение
Задача может быть решена с помощью теста, подобного следующему:
[Test]
public void JoinsObjectsWithSemiColon()
{
// Arrange
var formatterUnderTest = new StringFormatter();
formatterUnderTest.Configure(";");
var objects = new object[] {"a", "bc", 5, "d"};
// Act
var result = formatterUnderTest.Join(objects);
// Assert
Assert.AreEqual("a;bc;5;d", result);
}
Полный проект с решением можно найти в примере 2_ActArrangeAssert_Solution.
Дополнительные ресурсы
- Организация тестов