您的位置:
中国软件测试联盟  >> 资讯  >> 开源系列  >> Junit  >> 查看资讯

JUnit Gossip: TestSuite

[ 来源: 网络转载 | 作者:网络转载 | 时间:2007-3-21 10:38 ]

您定义自己的TestCase,并使用TestRunner来运行测试,事实上TestRunner并不直接运行 TestCase上的单元方法,而是透过TestSuite,TestSuite可以将数个TestCase在一起,而让每个TestCase保持简单。

来看看一个例子:

MathToolTest.java
package onlyfun.caterpillar.test;import onlyfun.caterpillar.MathTool;import junit.framework.TestCase;public class MathToolTest extends TestCase {    public MathToolTest(String testMethod) {        super(testMethod);    }    public void testGcd() {        assertEquals(5, MathTool.gcd(10, 5));    }        public static void main(String[] args) {        junit.textui.TestRunner.run(MathToolTest.class);    }}

在这个例子中,您并没有看到任何的TestSuite,事实上,如果您没有提供任何的TestSuite,TestRunner会自己建立一个,然后这个 TestSuite会使用反射(reflection)自动找出testXXX()方法。

如果您要自行生成TestSuite,则在继承TestCase之后,提供静态的(static)的suite()方法,例如:

public static Test suite() {
     return new TestSuite(MathTool.class);
}


如果您没有提供任何的TestSuite,则TestRunner就会像上面这样自动为您建立一个,并找出testXXX()方法,您也可以如下面定义 suite()方法:

public static Test suite() {
     TestSuite suite = new TestSuite(MathTool.class);
     suite.addTest(new MathToolTest("testGcd"));
     return suite;
}


JUnit并没有规定您一定要使用testXXX()这样的方式来命名您的测试方法,如果您要提供自己的方法(当然JUnit 鼓励您使用testXXX()这样的方法名称),则可以如上撰写,为了要能够使用建构函式提供测试方法名称,您的TestCase必须提供如下的建构函式:

public MathToolTest(String testMethod) {
    super(testMethod);
}

 

如果要加入更多的测试方法,使用addTest()就可以了,suite()方法传回一个TestSuite物件,它与 TestCase都实作了Test介面,TestRunner会调用TestSuite上的run()方法,然后TestSuite会将之委託给 TestCase上的run()方法,并执行每一个testXXX()方法。

除了组合TestCase之外,您还可以将数个TestSuite组合在一起,例如:

public static Test suite() {
    TestSuite suite= new TestSuite();
    suite.addTestSuite(TestCase1.class);
    suite.addTestSuite(TestCase2.class);
    return suite;
}


如此之来,您可以一次运行所有的测试,而不必个别的运行每一个测试案例,您可以写一个运行全部测试的主测试,而在使用TestRunner时呼叫 suite()方法,例如:

junit.textui.TestRunner.run(TestAll.suite());


TestCase与TestSuite都实作了Test介面,其运行方式为 Command 模式 的一个实例,而TestSuite可以组合数个TestSuite或TestCase,这是 Composite 模式的一个实例。


Tags:
打印

>> 相关资讯:

上一篇   下一篇
 
-5 -3 -1 - 1 3 5

评分

您的评论

我来说两句

seccode

·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为