Unity 6.3
0 онлайн 78 гостей 3 в системе
Вход
Программирование в Unity Шаг 177 из 210

6. SetUp и TearDown

Цели обучения

В этом упражнении вы получите практический опыт использования атрибутов NUnit [SetUp] и [TearDown] для уменьшения дублирования кода в тестах.

Введение и мотивация

Хорошая практика всегда позволять тестовому коду очищаться после себя, и вам также часто нужно настраивать вещи перед запуском теста. Если у вас есть несколько тестов, то это может легко стать большим дублированием кода, и если ваш тест не удастся, ваша очистка может даже не быть запущена, если вы не обернули ее в блоки try и finally.

В качестве решения этой проблемы, NUnit имеет [SetUp] и [TearDown] атрибуты. Методы с этими атрибутами выполняются соответственно до и после всех классов. Если вы запускаете несколько тестов класса сразу, подготовка и очистка выполняются между каждым из них.

public class TestClass
{
 [SetUp]
 public void MySetUp() { ... }

 [Test]
 public void MyFirstTest() { ... }

 [Test]
 public void MySecondTest() { ... }

 [TearDown]
 public void MyTearDown() { ... }
}

2010 год

Импорт образец 6_SetUpTearDown.

В этом проекте есть класс с именем FileCreatorОн имеет два метода:

  • CreateEmptyFile(fileName) — Создает пустой файл в каталоге OutputFiles

  • CreateFile(string fileName, string content) — Создает файл с указанным содержимым в каталоге OutputFiles

Улов в том, что он будет бросать DirectoryNotFoundException, если не существует вызова выхода OutputFiles в текущем каталоге. Вам нужно будет создать этот каталог внутри SetUp методом и удалить его снова после этого с помощью TearDown. Ваш тест может затем предположить, что он начинается с пустого каталога, что упрощает утверждение.

Подсказки

  • Вы можете использовать Directory.CreateDirectory для создания каталога.
  • Вы можете использовать Directory.Delete с установленным рекурсивным флагом (второй аргумент) для удаления каталога вместе со всеми его файлами.
  • Directory.GetFiles может быть использован для получения файлов в заданном каталоге.
  • Path.Combine является удобным методом для объединения частей пути к файлу. Например, имя каталога и имя файла.

Решение

Задача может быть решена с помощью теста, подобного следующему:

[SetUp]
public void Setup()
{
 Directory.CreateDirectory(FileCreator.k_Directory);
}

[Test]
public void CreatesEmptyFile()
{
 var fileCreatorUnderTest = new FileCreator();
 var expectedFileName = "MyEmptyFile.txt";
 
 fileCreatorUnderTest.CreateEmptyFile(expectedFileName);

 var files = Directory.GetFiles(FileCreator.k_Directory);
 Assert.That(files.Length, Is.EqualTo(1), "Expected one file.");
 var expectedFilePath = Path.Combine(FileCreator.k_Directory, expectedFileName);
 Assert.That(files[0], Is.EqualTo(expectedFilePath));
}

[Test]
public void CreatesFile()
{
 var fileCreatorUnderTest = new FileCreator();
 var expectedFileName = "MyFile.txt";
 var expectedContent = "TheFileContent";
 
 fileCreatorUnderTest.CreateFile(expectedFileName, expectedContent);

 var files = Directory.GetFiles(FileCreator.k_Directory);
 Assert.That(files.Length, Is.EqualTo(1), "Expected one file.");
 var expectedFilePath = Path.Combine(FileCreator.k_Directory, expectedFileName);
 Assert.That(files[0], Is.EqualTo(expectedFilePath));
 var content = File.ReadAllText(expectedFilePath);
 Assert.That(content, Is.EqualTo(expectedContent));
}

[TearDown]
public void Teardown()
{
 Directory.Delete(FileCreator.k_Directory, true);
}

Полный проект с решением можно найти в примере 6_SetUpTearDown.

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

  • SetUp и TearDown