Version: 6000.3
语言: 中文
1. 在 Unity 项目中运行测试
3. 语义测试断言

2. 安排、行动、断言

学习目标

在本练习中,您将了解 AAA(排列、行动、断言)的核心单元测试原则,这将帮助您构建单元测试。

介绍和动机

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作为正在测试的类的变量名称。这有助于保持测试的焦点干净。

代码的 Act 部分应包含尽可能少的行,以反映实际测试的内容。在最佳情况下,断言应该只包含断言调用,但也可能需要包含一些逻辑行以允许断言。

锻炼

导入示例 2_ActArrangeAssert从 Package Manager 窗口进入 Unity 编辑器(版本 2019.2 或更高版本)。

在这个项目中,我们有一个名为StringFormatter.它有两种感兴趣的方法:void Configure(string joinDelimiter)string Join(object[] args).

本练习的目标是编写一个或多个测试,测试Join方法。例如,测试它可以与“;”(分号)分隔符。

提示

  • 设置测试输入和调用Configure(";")将进入Arrange测试的一部分。
  • 最好用空行将测试的三个部分(排列、行动和断言)分隔开。

溶液

该练习可以通过如下测试来解决:

[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.

其他资源

1. 在 Unity 项目中运行测试
3. 语义测试断言