Junit使用基础总结

来源:互联网 发布:excel中建立数据表格 编辑:程序博客网 时间:2024/05/17 10:57
典型的使用JUnit的方法就是继承TestCase类,然后重载它的一些重要方法:setUp()、teardown()、runTest()(这些都是可选的),TestCase通过setUp和tearDown来自动创建和销毁fixture。它会在运行每个测试之前调用setUp,并且在每个测试完成之后调用tearDown。TestCase类还实现了Assert类,该类中定义了8个核心方法。另外还有两个重要的接口:Test和TestListener。 1.Test, 包含两个方法:run() 和countTestCases(),它是对测试动作特征的提取。 2.TestListener, 包含四个方法:addError()、addFailure()、startTest()和endTest(),它是对测试结果的处理以及测试驱动过程的动作特征的提取。 所有的TestCase类都需要定义一个TestSuite,如果没有为TestCase定义一个TestSuite,TestRunner将主动为TestCase类定义一个TestSuite。如果没有,junit.swingui.TestRunner 将为TestCalculator创建一个缺省的TestSuite。该缺省的TestSuite将根据反射机制将TestCalculator中的所有以test***命名的测试都加入到该TestSuite中,随后TestRunner将调用run来执行该TestSuite中的所有TestCase。也可以自己定义TestSuite,在自定义的TestSuite中写入要测试的TestCase或者TestSuite。最后将这些客户对象组装到一个TestSuite对象中,交由 junit.textui.TestRunner.run (案例集) 驱动。

public class MathToolTest extends TestCase {//包含测试用例的类从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,则TestRunner会自己建立一个,然后这个 TestSuite会使用反射(reflection),从run中的.class文件中自动找出testXXX()方法然后运行。public static void main(String[] args) {        junit.textui.TestRunner.run(MathToolTest.class);    }如果您要自行生成TestSuite,可以在继承TestCase类之后使用静态suite方法,在为这个类添加测试用例,这样的话就不是使用TestRunner自己建立的默认suite了,从而测试用例也就不必必须使用test开头了,因为这是不是使用反射机制去这个.class中去找testXXX测试用例来执行。(但是这种方法是不被推荐使用的)具体使用如下public class MathToolTest extends TestCase { public MathToolTest(String testMethod) {         super(testMethod);    }    public void testGcd() {                         assertEquals(5, MathTool.gcd(10, 5));}public static Test suite() {//继承TestCase后使用suite方法构造自己的suiteTestSuite suite = new TestSuite(MathTool.class);//这个suite中只有一个.classsuite.addTest(new MathToolTest("testGcd"));     //向这个suite中添加MathToolTest类中的                        //testGcd测试用例return suite;//返回这个suite}    public static void main(String[] args) {         junit.textui.TestRunner.run(MathToolTest.class);//这是执行上面生成的suite    }}还可以则在继承TestSuite之後,使用静态的(static)的suite()方法来整合多个.class文件为一个suite,因为每个.class都包含多个测试用例,因此被认为是一个suite(这种suite可以是自动映射,这个是推荐的方式;还可以是通过继承TestCase类之后使用suite方法在这个.class中手动添加生成的suite,如上面所示)public class TestAll extends TestSuite { //自己构造的suite类从TestSuite类中继承public static Test suite() {         //使用静态方法suite来构造自己的suiteTestSuite suite = new TestSuite("TestSuite Test"); //命名自己的suite名称    suite.addTestSuite(TestCalcuator.class);     suite.addTestSuite(TestCalcuator2.class);     return suite; } public static void main(String args[]){     //junit.textui.TestRunner.run (suite()); junit.textui.TestRunner.run(TestAll.suite());} }TestCase与TestSuite都实作了Test介面,其运行方式为 Command 模式 的一个实例,而TestSuite可以组合数个TestSuite或TestCase,这是 Composite 模式 的一个实例。

原创粉丝点击