Visual Studio 2008 中的单元测试选项
本文讨论 VS2008 中不同的单元测试选项。
引言
本文将介绍 VS2008 中的单元测试工作原理以及可供大家使用的功能。
背景
还有其他执行类似功能的单元测试工具。我过去使用过,你们很多人也使用过 NUnit。还有其他一些执行单元测试变体的工具,例如 MBUnit。
添加测试
一旦您有了一个可以工作的项目并包含类文件,就可以创建单元测试。首先,我们需要创建基本的测试。可以通过“测试”菜单创建单元测试。
选择菜单项后,将显示此对话框
选项有:
- 有序测试 – 这将创建一个您可以设置所需单元测试顺序的测试
- 单元测试 – 这将创建一个 .cs 文件;然后您可以决定要执行哪些测试
- 单元测试生成器 – 将出现一个生成器,以便您可以选择要在单元测试中包含哪些类
单元测试生成器
如果选择单元测试生成器,将出现此对话框,以便您可以选择将测试哪些类
使用此对话框,您现在可以选择要进行单元测试的类方法。您应该注意的一点是,此对话框将显示所有方法和属性。它还会显示您可能不想测试的方法。选择要测试的正确方法由您决定。在创建第一个单元测试之前,将创建一个测试项目,如下所示。
选择方法后,生成器将创建源文件。将为已选择进行测试的每个类创建一个源文件。下面是生成器生成的源代码的示例
/// <summary>
///A test for RescanAlbumId
/// </summary>
// TODO: Ensure that the UrlToTest attribute
// specifies a URL to an ASP.NET page (for example,
// http://.../Default.aspx). This is necessary
// for the unit test to be executed on the web server,
// whether you are testing a page, web service, or a WCF service.
[TestMethod()]
[HostType("ASP.NET")]
[AspNetDevelopmentServerHost("C:\\MyProjects\\backup\\Simple\\SimplePhotos",
"/SimplePhotos")]
[UrlToTest("https:///SimplePhotos")]
public void RescanAlbumIdTest()
{
// TODO: Initialize to an appropriate value
Rescan_Accessor target = new Rescan_Accessor();
int Albumid = 0; // TODO: Initialize to an appropriate value
int expected = 0; // TODO: Initialize to an appropriate value
int actual;
actual = target.RescanAlbumId(Albumid);
Assert.AreEqual(expected, actual);
Assert.Inconclusive("Verify the correctness of this test method.");
}
您可以看到,参数已设置为默认值;为了使测试完全有效,您必须填入符合您要求的数值。设置正确的数值后,您可以像正常项目一样运行您的项目。最终的测试结果将出现在下面的窗口中。
单元测试
单元测试选项将创建一个源文件,其中包含以下代码片段
[TestMethod]
public void TestMethod1()
{
//
// TODO: Add test logic here
//
}
您必须填写 TestMethod1
以执行您需要执行的测试。您可以添加更多测试来测试您想要测试的方法。这与 NUnit 非常相似,在 NUnit 中,您需要编写要执行的测试。
有序测试
选择此选项时,将出现此对话框,以便您可以选择要运行哪些测试以及它们的顺序
左侧将显示所有可用测试。选择一个测试,然后按按钮将其移到右侧。在右侧列出所有测试后,如果顺序不是您计划的,可以将其向上或向下移动。在进行选择时,它们将保存在文件 OrderedTest1.orderedtest 或名称格式相似的文件中。要编辑列表,双击该文件将其打开,然后您可以进行更改。此有序列表将作为常规单元测试的一部分执行;它只是按您指定的顺序执行。
关注点
一旦开始单元测试过程,就必须确保跟上进度。将测试作为每次构建的一部分运行。随着新类的创建或方法的添加,您也必须创建新的单元测试。修改任何方法时,请确保也修改测试。正如 chamindu 在文章 将 Visual Studio Team System 2008 单元测试与 CruiseControl.NET 集成 中概述的那样,您可以将这些添加到 Cruise control 的夜间构建过程中。为了获得最佳结果,您应该将要测试的方法放在单独的程序集中。这样,您就可以使用与实际项目相同的程序集进行测试。这也使得测试更容易。一个有趣的事情是,每次运行测试时,都会在您登录的用户的 \Local Settings\Temp 目录中为每次运行创建一个名为 tmp6B.tmp.testgen 的目录。据我所能看到的,它们不会被清理,所以要小心。此目录包含您整个源代码树的副本,因此请确保其中没有非常大的文件。在我的例子中,我有一个数据库文件,我在连接字符串中进行了附加,并且测试每次运行测试时都会复制所有文件。我当时很幸运,那个数据库文件不是很大。
历史
- 2009 年 5 月 11 日 - 首次发布。