技术开发 频道

使用VS Team Edition进行单元测试

建立正确的测试环境
每个测试运行子目录都包含一个Out目录,测试和被测试代码的运行结果都位于其中。它们可能是重要文件,例如执行测试代码相关的部署。例如,在图6中可以找到Deployment选项卡,该选项卡提供了这项功能。另外,更具粒度的方法是在测试方法上使用DeploymentItem属性,该属性需要一个部署项。

[TestClass]
public class MoreUnitTests
{
    [DeploymentItem(
"people.xml")]
    [TestMethod]
    
public string GetPersonIDFromFileTest()
    {
        
string name="Bob";
        
int expected id=1;

        
// GetPersonIDFromFile方法从指定位置读取people.xml
        int actual =
                       MyUtils.DataAccessLayer.GetPersonIDFromFile(name);
        Assert.AreEqual
<int>(expected, actual);
    }
}

另外,还有一些用于帮助建立基于测试或测试组环境的功能。当然,这需要创建和安装数据库,因为数据库是测试方法的交互对象。在图6中可以注意到“Setup And Cleanup Scripts”选项卡,该选项卡提供在一组测试运行之前或之后运行脚本的功能。例如,这些脚本可以建立和清除数据库。另一个实现方法是定义带有特殊标注属性的方法。一对标注了AssemblyInitialize/AssemblyCleanup属性的方法会在测试程序集运行之前/后执行。一对标注了ClassInitialize/ClassCleanup属性的方法会在测试类运行之前/后执行。一对标注了TestInitialize/TestCleanup属性的方法会在测试类的每个测试方法运行之前/后执行。如下代码说明如何在一组测试运行之前建立数据库,之后再将其清除。

[TestClass]
public class YetMoreUnitTests
{
     [ClassInitialize()]
    
public static void Setup(TestContext testContext)
    {
        
// 创建并安装数据库。
    }

     [ClassCleanup()]
    
public static void Teardown()
    {
        
// 清除数据库。
    }

     [TestMethod]
    
public string GetPersonIDFromDatabaseTest()
    {
        
string name="Bob";
        
int expected id=1;

        
// GetPersonIDFromDatabase方法从数据库读取数据。
        int actual =
                     MyUtils.DataAccessLayer.GetPersonIDFromDatabase(name);
        Assert.AreEqual
<int>(expected, actual);
    }
}
0
相关文章