包含此页的版本:
不含此页的版本:
在本练习中,您将获得使用 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() { ... }
}
导入示例 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.