如何:创作单元测试

编辑单元测试的原因有两个:您正在手动创作一个单元测试;或者正在编辑一个新生成的单元测试。虽然您可以运行新生成的单元测试,但是由于它们是使用默认内容创建的,为了使测试能够产生有意义的结果,必须使用适当的值对默认内容进行初始化。在生成的单元测试中,通常需要自定义变量的赋值以及一个或多个 Assert 语句。

在单元测试中使用 Assert 语句

默认情况下,每个生成的单元测试都调用 Inconclusive 方法,这会导致测试失败,因为测试实际上仍未实现。下一步是添加有意义的代码,以检查所测试的方法的操作是否正确。实现该目的的典型方法是生成一个值,然后使用 Assert.AreEqual 语句将该值与预期值进行比较。有关示例,请参见单元测试的结构中的“单元测试示例”。新生成的单元测试包含“To-do”注释,以提供更改建议。

不包含 Assert 语句的单元测试只要不超时,并且不引发意外的异常,就会自动通过。这是单元测试框架不包含 Assert.Pass 语句的原因。有关更多信息,请参见基本测试结果使用 Assert 类

打开和创作单元测试

本主题包含两个过程:

  • 第一个过程描述如何编辑现有单元测试。通常,执行此操作的目的是为了准备一个已经自动生成的单元测试。请参见 如何:生成单元测试

  • 第二个过程描述如何手动创建和创作一个单元测试。

编辑现有单元测试

  1. 在解决方案资源管理器中的测试项目中,找到并打开包含该单元测试的文件,然后找到要编辑的单元测试方法。

    - 或 -

    在“测试视图”中,双击该单元测试,这将打开包含该单元测试的文件并滚动到相应的单元测试方法。

  2. 在方法中找到变量赋值部分。

    对于新生成的测试,将使用“To-Do”语句标记变量赋值部分,旨在提醒您需要自定义这些赋值语句。例如,以下便是需要编辑的一个典型的赋值语句:

    string target.owner = null; // TODO: Initialize to an appropriate value 
    
  3. 为每个变量赋给相应的值。

    若要了解什么样的值才是适当的,应考虑以下几个方面:在调用方法之前这些变量可能被初始化为的值,在调用方法时这些变量值可能经历的更改,以及期望的结果。有关此过程的示例,请参见演练:创建并运行单元测试中的“运行并编辑单元测试”过程。

  4. 在方法中查找并编辑 Assert 语句。如果需要,添加其他 Assert 语句。

单元测试框架提供了众多的附加 Assert 类和方法,为您编写有用的 Assert 语句带来了极大的灵活性。有关更多信息,请参见单元测试框架

以手动方式键入创建单元测试

  1. 在解决方案资源管理器中,右击某个测试项目,指向“添加”,然后单击“新建测试”。

    - 或 -

    右击“测试视图”窗口图面,再单击“新建测试”。

    这将显示“添加新测试”对话框。

  2. 在“模板”下单击“单元测试”,然后单击“确定”。

    新的源代码文件(其名称类似于 UnitTest1.cs)将被添加到测试项目中,它使用测试项目所用的语言。此文件包含单元测试需要的几个要素:

    • 它引用 Microsoft.VisualStudio.TestTools.UnitTesting 命名空间和 System 命名空间。

    • 它定义自己的命名空间,此命名空间包含一个测试类。测试类具有 [TestClass] 属性。

    • 它包含一个初始化方法和一个清除方法。这两个方法分别具有 [TestInitialize()] 和 [TestCleanup()] 属性。

    • 它包含一个具有 [TestMethod] 属性的空白测试方法。您可以在此方法内添加测试逻辑。这个方法的默认名称类似于 TestMethod1()。

    此文件还会在用于编辑源代码的窗口中打开。新的(空白的)测试方法将显示在“测试视图”窗口和“测试管理器”窗口中。

  3. 为测试方法添加测试代码。

单元测试框架提供了众多的附加 Assert 类和方法,为您编写有用的 Assert 语句带来了极大的灵活性。有关更多信息,请参见单元测试概述单元测试框架

请参见

任务

如何:生成单元测试

概念

单元测试概述
单元测试框架

其他资源

创建单元测试
管理测试
运行测试
测试结果和分析