Version: 6000.3
语言: 中文
5. 断言和期望日志
7. PlayMode 测试

6. 设置和拆卸

学习目标

在本练习中,您将获得使用 NUnit 属性的实际经验[SetUp][TearDown]以减少测试中的代码重复。

介绍和动机

最好始终让您的测试代码自行清理,并且您还经常需要在运行测试之前进行设置。如果您有多个测试,那么这很容易成为大量代码重复,如果您的测试失败,如果您没有将其包装,您的清理甚至可能不会运行tryfinally块。

作为解决这个问题的解决方案,NUnit 具有[SetUp][TearDown]属性。具有此属性的方法将分别在任何类之前和之后运行。如果同时在类中运行多个测试,则拆解和设置将在每个测试之间运行。

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

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

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

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

锻炼

导入示例 6_SetUpTearDown.

在这个项目中,有一个名为FileCreator.它有两种方法:

  • CreateEmptyFile(fileName)- 在OutputFiles目录

  • CreateFile(string fileName, string content)- 创建一个文件,其中包含给定内容OutputFiles目录

问题是它会抛出一个DirectoryNotFoundException,如果没有调用的输出OutputFiles在当前目录中。您需要在SetUp方法,然后使用TearDown.然后,您的测试可以假设它从 emtpy 目录开始,这简化了断言。

提示

  • 您可以使用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.

其他资源

5. 断言和期望日志
7. PlayMode 测试