Unity 6.3
0 онлайн 25 гостей 3 в системе
Вход

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.

Дополнительные ресурсы

  • Организация тестов