使用VS2008对类成员进行单元测试

在VS2008中,我们可以对类[1]的属性和方法创建单元测试[2]以验证代码的正确性,测试过程不复杂,我们用实例来说明。

假如有一个类Own,我们期望对其Join方法进行单元测试以验证代码的正确性,类代码如下:

public class Own
{
    public string Join(string a,string b)
    {
        return a + b;
    }
}

OK,在Join方法体上点击鼠标右键,选择"创建单元测试...",将弹出创建单元测试对话框,直接点击确定按钮后VS2008将自动创建好单元测试类OwnTest(有删改):

[TestClass()]
public class OwnTest
{

    /// <summary>
    ///Join 的测试
    ///</summary>
    [TestMethod()]
    [HostType("ASP.NET")]
    [AspNetDevelopmentServerHost("%PathToWebRoot%\\net", "/")]
    [UrlToTest("http://localhost/")]
    public void JoinTest()
    {
        Own_Accessor target = new Own_Accessor(); // TODO: 初始化为适当的值
        string a = string.Empty; // TODO: 初始化为适当的值
        string b = string.Empty; // TODO: 初始化为适当的值
        string expected = string.Empty; // TODO: 初始化为适当的值
        string actual;
        actual = target.Join(a, b);
        Assert.AreEqual(expected, actual);
        Assert.Inconclusive("验证此测试方法的正确性。");
    }
}

可以看到,单元测试类OwnTest的类名和其方法都和原先的Own类非常相像。我们稍做下修改,设置下传入的参数值,并设置一个期望的返回值:

[TestMethod()]
[HostType("ASP.NET")]
[AspNetDevelopmentServerHost("%PathToWebRoot%\\net", "/")]
[UrlToTest("http://localhost/")]
public void JoinTest()
{
    Own_Accessor target = new Own_Accessor();
    string a = "mzwu"; // Join方法参数,这边设置一个初始值
    string b = ".com"; // Join方法参数,这边设置一个初始值
    string expected = "mzwu.com"; // 期望方法的返回值
    string actual;
    actual = target.Join(a, b);
    Assert.AreEqual(expected, actual);//判断方法返回的值是否为我们期望的值
    //Assert.Inconclusive("验证此测试方法的正确性。");
}

在JoinTest方法体上点击右键,选择"运行测试",过一会在测试结果窗口中我们即可看到测试的结果。

注意,测试类必须TestClass标记,所有测试方法必须有TestMethod标记!此外,还有4个标记也比较常用:ClassInitialize、ClassCleanup、TestInitialize和TestCleanup,它们所标识的方法分别是在运行类中的第一个测试前先运行、运行完类中的所有测试后再运行、运行每个测试前先运行和运行完每个测试后运行。下边再来看下完整的OwnTest类:

[TestClass()]
public class OwnTest
{
    private TestContext testContextInstance;

    /// <summary>
    ///获取或设置测试上下文,上下文提供
    ///有关当前测试运行及其功能的信息。
    ///</summary>
    public TestContext TestContext
    {
        get
        {
            return testContextInstance;
        }
        set
        {
            testContextInstance = value;
        }
    }

    #region 附加测试属性
    //
    //编写测试时,还可使用以下属性:
    //
    //使用 ClassInitialize 在运行类中的第一个测试前先运行代码
    [ClassInitialize()]
    public static void MyClassInitialize(TestContext testContext)
    {
    }

    //使用 ClassCleanup 在运行完类中的所有测试后再运行代码
    [ClassCleanup()]
    public static void MyClassCleanup()
    {
    }
    
    //使用 TestInitialize 在运行每个测试前先运行代码
    [TestInitialize()]
    public void MyTestInitialize()
    {
    }
    
    //使用 TestCleanup 在运行完每个测试后运行代码
    [TestCleanup()]
    public void MyTestCleanup()
    {
    }
    
    #endregion


    [TestMethod()]
    [HostType("ASP.NET")]
    [AspNetDevelopmentServerHost("%PathToWebRoot%\\net", "/")]
    [UrlToTest("http://localhost/")]
    public void JoinTest()
    {
        Own_Accessor target = new Own_Accessor();
        string a = "mzwu"; // Join方法参数,这边设置一个初始值
        string b = ".com"; // Join方法参数,这边设置一个初始值
        string expected = "mzwu.com"; // 期望方法的返回值
        string actual;
        actual = target.Join(a, b);
        Assert.AreEqual(expected, actual);//判断方法返回的值是否为我们期望的值
        //Assert.Inconclusive("验证此测试方法的正确性。");
    }
}

[1]aspx.cs代码页中的类成员不可进行单元测试。
[2]单元测试:使用单元测试可以创建用 C++、Visual C# 或 Visual Basic 编写的、演练源代码的编程测试。单元测试可调用类的方法,传递合适的参数,并验证返回值是否为所期望的值。

评论: 0 | 引用: 0 | 查看次数: 5347
发表评论
登录后再发表评论!