技术开发 频道

Nunit使用资料

【IT168 技术文章】

    简单的Test Case

    书写测试代码的步骤:

    1.  创建TestCase的一个实例;

    2.  Override方法RunTest();

    3.  如要检查某值,则调用Assert。

    例如,测试“两个Money对象之和与包含它们之和的对象相等”的测试代码如下:

public void TestSimpleAdd() {

    Money m12CHF= new Money(12, "CHF");

    Money m14CHF= new Money(14, "CHF");

    Money expected= new Money(26, "CHF");

    Money result= m12CHF.Add(m14CHF);

    Assert(expected.Equals(result));

}

    如果要写的测试与以前写的测试非常像,那么就写一个Fixture来代替。如果想在一个测试中运行更多的东西,就创建一个Suite。

    Fixture
    如果有两个或两个以上的测试作用于相同或类似的对象集,我们该怎么办呢?测试作用于一个已知的对象集,这个对象集被称为fixture。一般建立这个fixture的时间比实际测试的时间多得多。

    当有个公共的fixture时,我们可以这么做:

    1.  创建TestCase的子类。

    2.  为fixture的每部分加入一个实例变量。

    3.  Override SetUp()初始化这些变量。

    4.  Override TearDown()释放任何在SetUp中分配的永久资源。

    例如,编写用来与12 Swiss Francs,14 Swiss Francs和28 US Dollars不同组合一起工作的TestCase时,首先创建一个fixture:

public class MoneyTest: TestCase {

    private Money f12CHF;

    private Money f14CHF;

    private Money f28USD;

   

    protected override void SetUp() {

        f12CHF= new Money(12, "CHF");

        f14CHF= new Money(14, "CHF");

        f28USD= new Money(28, "USD");

    }

}

    一旦准备好Fixture,就可书写任意多的测试用例。

    Test Case
    当有一个Fixture如何书写和调用一个独立的Test Case呢?书写一个没有的fixture测试用例是非常简单的——只需在TestCase 的一个子类中override RunTest。为一个Fixture书写测试用例是同样的方法,通过为set up代码制造一个TestCase的子类,然后为每个独立的测试用例制造不同的子类。然而,不久你就会注意到这些代码中的大部分成为了语法的牺牲品。

    NUnit为书写一个基于Fixture的测试提供了简明的方法:

    1.  在fixture类中书写一个public的测试方法。在此,必须确保这个方法是public的,否则它将不能通过reflection被调用。

    2.  创建这个TestCase的一个实例,并把这个测试方法的名字传给它的constructor。

    例如,测试一个Money对象与另一个MoneyBag的和:

public void TestMoneyMoneyBag() {

    // [12 CHF] + [14 CHF] + [28 USD] == {[26 CHF][28 USD]}

    Money bag[]= { new Money(26, "CHF"), new Money(28, "USD") };

    MoneyBag expected= new MoneyBag(bag);

    AssertEquals(expected, f12CHF.Add(f28USD.Add(f14CHF)));

}

0
相关文章