持续集成 - 测试
持续集成的关键特性之一是确保持续测试包含CI服务器构建的所有代码。CI服务器执行构建后,必须确保已到位测试用例以对所需代码进行测试。每个CI服务器都能够在CI套件中运行单元测试用例。在.Net中,单元测试是.Net框架中内置的功能,并且可以将其整合到CI服务器中。
本章将介绍如何在.Net中定义测试用例,然后在构建完成后让我们的TeamCity服务器运行此测试用例。为此,我们首先需要确保为我们的示例项目定义了一个单元测试。
为此,我们必须以最大的谨慎遵循以下步骤。
步骤1 - 让我们向我们的解决方案添加一个新类,这将在我们的单元测试中使用。此类将具有一个名称变量,该变量将保存字符串“持续集成”。此字符串将在网页上显示。右键单击“简单项目”并选择菜单选项添加→类。
步骤2 - 为类命名为Tutorial.cs,然后单击屏幕底部的“添加”按钮。
步骤3 - 打开Tutorial.cs文件并在其中添加以下代码。此代码仅创建一个名为Name的字符串,并在构造函数中将名称分配给字符串值Continuous Integration。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Simple {
public class Tutorial {
public String Name;
public Tutorial() {
Name = "Continuous Integration";
}
}
}
步骤4 - 让我们对Demo.aspx.cs文件进行更改以使用此新类。使用以下代码更新此文件中的代码。因此,此代码现在将创建上面创建的类的新的实例。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Simple {
public partial class Demo : System.Web.UI.Page {
Tutorial tp = new Tutorial();
protected void Page_Load(object sender, EventArgs e) {
tp.Name = "Continuous Integration";
}
}
}
步骤5 - 在我们的demo.aspx文件中,让我们现在引用在aspx.cs文件中创建的tp.Name变量。
<%@ Page Language = "C#" AutoEventWireup = "true"
CodeBehind = "Demo.aspx.cs" Inherits = "Simple.Demo" %>
<!DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml">
<head runat = "server">
<title>TutorialsPoint1</title>
</head>
<body>
<form id = "form1" runat = "server">
<div>
<% = tp.Name%>)
</div>
</form>
</body>
</html>
为了确保我们的代码在进行这些更改后能够正常工作,您可以在Visual Studio中运行代码。编译完成后,您应该会获得以下输出。
步骤6 - 现在是时候向项目添加我们的单元测试了。右键单击解决方案并选择菜单选项添加→新项目。
步骤7 - 导航到测试,并在右侧选择单元测试项目。命名为DemoTest,然后单击“确定”。
步骤8 - 在您的Demo Test项目中,您需要添加对简单项目的引用以及必要的测试程序集。右键单击该项目并选择菜单选项添加引用。
步骤9 - 在出现的下一个屏幕中,转到“项目”,选择Simple Reference,然后单击“确定”。
步骤10 - 再次单击添加引用,转到“程序集”并在搜索框中键入Web。然后添加System.Web的引用。
步骤11 - 在单元测试文件中,添加以下代码。此代码将确保Tutorial类具有一个字符串名称变量。它还将断言Name应该等于“持续集成”的值。这将是我们的简单测试用例。
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.VisualStudio.TestTools.UnitTesting.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Simple;
namespace DemoTest {
[TestClass]
public class UnitTest1 {
[TestMethod]
public void TestMethod1() {
Tutorial tp = new Tutorial();
Assert.AreEqual(tp.Name, "Continuous Integration");
}
}
}
步骤12 - 现在让我们在Visual Studio中运行我们的测试以确保它有效。在Visual Studio中,选择菜单选项测试→运行→所有测试。
运行测试后,您将在Visual Studio的左侧看到测试成功运行。
在TeamCity中启用持续测试 - 现在所有测试用例都已到位,是时候将它们集成到我们的Team City服务器中了。
步骤13 - 为此,我们需要在项目配置中创建一个构建步骤。转到您的项目主页并单击“编辑配置设置”。
步骤14 - 然后转到“构建步骤→MS Build”并单击“添加构建步骤”,如下面的屏幕截图所示。
在出现的下一个屏幕中,添加以下值 -
选择运行程序类型为Visual Studio Tests。
输入可选的测试步骤名称。
选择测试引擎类型为VSTest。
选择测试引擎版本为VSTest2013。
在测试文件名称中,提供位置为DemoTest\bin\Debug\DemoTest.dll - 请记住,DemoTest是我们包含单元测试的项目的名称。DemoTest.dll将由我们的第一个构建步骤生成。
单击“保存”,它将位于屏幕末尾。
现在您将为项目有两个构建步骤。第一个是构建步骤,它将构建您的应用程序代码和您的测试项目。下一个将用于运行您的测试用例。
步骤15 - 现在是时候将所有代码签入Git了,以便可以触发整个构建过程。唯一的区别是这次您需要从Demo父文件夹运行git add和git commit命令,如下面的屏幕截图所示。
现在,当触发构建时,您将看到一个初始输出,该输出将说明测试已通过。
步骤16 - 如果单击“测试通过”结果并转到“测试”选项卡,您现在将看到UnitTest1已执行并且已通过。