65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Team Foundation Services 2015 进行单元测试

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2016年8月4日

CPOL

7分钟阅读

viewsIcon

13316

将单元测试添加到 Team Foundation Services 2015 生成中

引言

在我之前关于配置 Team Foundation Services 2015 构建的介绍文章之后,我将继续演示如何向构建过程添加单元测试。如果您还没有阅读我的第一篇文章,请在继续阅读本文之前阅读。

与我之前的文章一样,我希望本文保持简洁明了。为此,我将使用 Visual Studio 2015 附带的单元测试框架。然而,这些概念同样适用于其他单元测试框架,例如 Nunit

背景

本文假设读者对 Team Foundation Services 以及构建软件和单元测试的基本原理有一些基本了解。

创建单元测试

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

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

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

新项目创建完成后,您会在项目中找到一个默认的 Program.cs 文件,其中已有一个用于创建单元测试的骨架结构。您可以继续使用此模板,也可以从头开始添加新文件。两者都没有关系。您可能会觉得使用默认类更容易,或者您可能更喜欢从头开始创建。

需要注意的类的重要部分如下。

  • 对程序集 Microsoft.VisualStudio.TestTools.UnitTesting(如果使用其他单元测试框架,例如 NUnit,则为其他单元测试程序集)的引用。
  • 该类使用 [TestClass] 属性进行修饰。
  • 每个方法都需要是公共的,返回类型为 void(如果使用不同的语言,则为等效类型),并使用 [TestMethod] 属性进行修饰。
  • 每个方法都需要执行必要的断言以提供足够的单元测试覆盖率。

 

除了用于测试方法的 [TestMethod] 修饰之外,您可能会发现还有其他几个方法修饰很有用。

  • [Ignore] - 使用此项可防止测试运行器执行测试方法。当您想要(可能是临时地)禁用某个特定测试而无需删除它时,这会很有用。
  • [ExpectedException] - 使用此项测试异常。通常在结构化异常处理中,很难测试异常,即代码落入代码的 catch 部分的地方。使用单元测试框架很简单。使用 [ExpectedException()] 修饰,您可以测试任何异常,例如 [ExpectedException(typeof(ArgumentException)))]

关于构成一组良好单元测试的全面详细讨论超出了本文的范围。但是,我强烈推荐 Roy Osherove 的书 《单元测试艺术》。这可能是您唯一需要的单元测试书籍(它肯定是我拥有的唯一一本关于该主题的书)。

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

将单元测试添加到我们的构建中

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

选择您要添加测试的所需项目,您将看到类似于下图的 TFS 项目仪表板。

我假设已经创建了一个构建,我们只关心向其中添加单元测试。有关如何创建 TFS 2015 构建的说明,请参阅我的上一篇文章

那么让我们从单击 添加构建步骤... 开始,选择左侧的 测试 筛选器,选择 Visual Studio Test 选项,然后单击右侧的 添加 按钮。我们现在应该会看到一个空的 Visual Studio Test 步骤,如下图所示。

如以下屏幕截图所示,向构建步骤添加必要的信息。为了保持本文的简单性,您暂时只需输入 测试程序集。使用省略号选择您之前创建的项目(其中包含您的单元测试)。

您会在屏幕截图中注意到,我已经为 运行设置文件 添加了一个值。这是一个可以用来定制测试执行方式的文件。您可以指定平台、配置以及单元测试执行的许多其他方面。我发现这非常有用,值得更详细地研究这些内容。这里有一篇关于通过 .runsettings 文件配置单元测试的有用文章

在下面的示例 .runsettings 文件中,我只是告诉测试运行器将单元测试的输出放在哪里。这是为了可以发布测试结果(我稍后会介绍)。为了发布测试结果,您需要知道它们已保存到哪里,因此我使用 .runsettings 文件配置了此位置。最好将 .runsettings 文件添加到您的版本控制系统(在我们的例子中是 TFS 2015)。

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <!-- Configurations that affect the Test Framework -->
  <RunConfiguration>
    <!-- Path relative to solution directory -->
    <ResultsDirectory>.\TestResults</ResultsDirectory>
  </RunConfiguration>
</RunSettings>

发布我们的测试结果

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

点击 添加构建步骤...,选择左侧的 测试 过滤器,然后选择 发布测试结果 选项,并点击右侧的 添加 按钮。我们现在应该会看到一个空的 发布测试结果 构建步骤。

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

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

在构建结果仪表板的右侧,您将看到一个指向 测试结果 的链接。单击蓝色链接以打开 VSTest 测试运行结果。

VSTest 测试运行结果提供了已运行测试及其结果的详细覆盖范围。

VSTest 测试运行结果也通过一系列易于阅读的图表进行了总结,软件经理、项目经理等希望查看测试的顶层视图的人员可以使用这些图表。

摘要

就是这样了。本文没有涵盖 TFS 2015 在测试方面可以做的更多事情。但是,我希望这能为您创建自己的单元测试并将其添加到构建中提供足够的信息。如果您希望我进一步详细说明本文中的任何内容,请随时发表评论。

© . All rights reserved.