如何将单元测试集成到构建过程中

在本文中,将展示如何在构建过程中添加单元测试。如果还没有阅读第一篇文章,建议先阅读那篇文章再继续阅读本文。为了保持本文的简洁明了,将使用Visual Studio2015中附带的单元测试框架。然而,这些概念同样可以应用于其他单元测试框架,如NUnit。

假设读者已经对Team Foundation Services和构建软件及单元测试的基本原则有一定的了解。

创建单元测试

为了将单元测试添加到构建中,首先需要创建一些单元测试。单元测试的美妙之处在于,在开发过程中编写的相同测试(无论是否遵循测试驱动开发)都可以添加到构建过程中。因此,没有重复的工作。在开发周期中编写的所有测试随后作为构建过程的一部分执行。

Visual Studio中打开解决方案。然后右键单击解决方案,选择“添加”然后选择“新建项目...”。从左侧的过滤器中选择选择的语言(例如Visual C#),然后选择“测试”。现在应该看到一个测试项目模板列表,如下所示。

为了本文的目的,将创建一个C#测试项目,但可以自由选择选择的语言。选择“单元测试项目”并输入适合的项目名称和位置,然后点击“确定”。

当新项目创建完成后,将在项目中找到一个默认的Program.cs文件,里面已经有一个创建单元测试的骨架结构。可以继续使用这个模板,或者从头开始添加一个新文件。无论如何都可以。可能会发现自己更容易使用默认类,或者可能更喜欢从头开始创建一个。

类的重要部分如下:

  • 引用程序集Microsoft.VisualStudio.TestTools.UnitTesting(或者如果使用其他单元测试框架,如NUnit,则引用其他单元测试程序集)
  • 类用[TestClass]属性装饰
  • 每个方法需要是public的,返回类型为void(或者如果使用不同的语言则为等效类型),并用[TestMethod]属性装饰
  • 每个方法需要执行必要的断言,以提供充分的单元测试覆盖率

除了[TestMethod]装饰测试方法之外,还有一些其他的方法装饰可能会觉得很有用。

  • [Ignore] - 使用这个来防止测试方法被测试运行器执行。这在想要(可能是暂时地)禁用一个特定的测试而不删除它时很有用。
  • [ExpectedException] - 使用这个来测试异常。通常在结构化异常处理中测试异常可能很困难,即代码掉入代码的catch部分。有了单元测试框架,这变得很简单。使用[ExpectedException()]装饰,可以测试任何异常,例如[ExpectedException(typeof(ArgumentException))]。

关于什么构成一个好的单元测试集的全面和详细的讨论超出了本文的范围。然而,可以完全推荐Roy Osherove的书《单元测试的艺术》。这可能是所需要的唯一的单元测试书籍(它当然是拥有的唯一的关于这个主题的书)。

在继续将单元测试添加到构建之前,请确保它们全部运行并通过(如果想让构建在构建过程中单元测试失败时采取纠正措施,可以稍后强制它们失败)。

单元测试添加到构建中

首先,需要在喜欢的浏览器中打开TFS2015首页。URL应该类似于http://tfsroot:8080/tfs,应该看到类似于下面的截图。这是TFS 2015仪表板。

选择想要添加测试的所需项目,将被呈现TFS项目仪表板,类似于下面的截图。

让从点击“添加构建步骤...”开始,选择左侧的“测试”过滤器,选择“Visual Studio测试”选项,然后点击右侧的“添加”按钮。现在应该被呈现一个空的Visual Studio测试步骤,如下所示。

向构建步骤添加必要的信息,如下所示。继续保持本文简单,目前只需要输入的是“测试程序集”。使用省略号选择之前创建的项目(包含单元测试)。

会注意到在截图中为“运行设置文件”添加了一个值。这是一个可以使用的文件,用于自定义测试是如何执行的。可以指定平台、配置以及单元测试执行的许多其他方面。发现这非常有用,非常值得详细研究这些。这是一篇有用的文章,关于如何通过.runsettings文件配置单元测试。

在下面的.runsettings文件示例中,只是告诉测试运行器将单元测试的输出放置在哪里。这是为了测试结果可以发布(将在片刻后介绍)。为了发布测试结果,需要知道它们已经被保存在哪里,这就是为什么使用.runsettings文件配置这个位置的原因。最好将.runsettings文件添加到版本控制系统中(在情况下是TFS2015)。

<?xml version="1.0" encoding="utf-8"?> <RunSettings> <RunConfiguration> <ResultsDirectory> .\TestResults </ResultsDirectory> </RunConfiguration> </RunSettings>

发布测试结果

在前面的步骤中,运行了单元测试,并额外配置了这些结果被发布到一个已知位置,使用了一个.runsettings文件。现在可以发布这些结果,以便它们对构建过程可见,并可以在构建完成后在构建结果仪表板上显示。

点击“添加构建步骤...”,选择左侧的“测试”过滤器,选择“发布测试结果”选项,然后点击右侧的“添加”按钮。现在应该被呈现一个空的发布测试结果构建步骤。

对于“测试结果格式”选择VSTest。在“测试结果文件”文本框中输入之前添加到.runsettings文件中的文件夹名称,带有*.trx选项。这是必需的,因为每次单元测试被执行时,它们都被发布到一个包含它们创建的确切日期/时间的文件名中。因此,提前知道文件名是不可能的。使用*.trx选项确保构建步骤可以定位测试运行器的输出。

如果不想等待代码提交来触发构建,可以简单地强制构建到队列。要查看测试步骤的结果,请转到已完成构建的列表并选择最后一个构建。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485