JUnit4简易教程

1.下载JUnit4的jar包,在项目上右键选properties->Java Build Path ->Libraries->Add library添加刚才的jar包

 

2.在项目中找一个要测试的类(或者在其他包中建立,再选要测试的类),右键New-> JUnit Test Case

 

3.如果是在要测试的类上new则Class under test直接会选中当前类,否则要自己手动选择要测试的类.

 

4.点击下一步则勾选要测试的方法,下一步则生成测试类.

 

5.点击生成的测试类,run as -> JUnit Test则可以进行测试.

 

下面讲解一下测试类中的一些注释的作用.

@Test标注

假设要测试的类是ClassA.java,生成的测试文件是ClassATest.java

我们要测试ClassA中的funcA方法,则我们在ClassATest.java中要先创建一个ClassA的对象

private static ClassA classa= new ClassA ();

在测试类ClassATest.java中的测试方法TestfuncA之前,我们要先添加@Test ,表示这个是测试函数,并且TestfuncA必须无返回值.

public void TestfuncA(){
  assertEquals(2,classa.funcA()); //如果classa.funcA()的结果是2则正确,否则错误.
}

@Test的作用就是声明这个是测试方法.

 

@Ignore标注

假设测试类ClassATest.java中的测试方法TestfuncB的测试方法还没写好,不想测试的时候运行他,则可以用该标注来跳过.

 

@Before

我们想对ClassA做单元测试,但是可能里面的funcA运行之后,会影响funcB的值(如改变了全局变量).这个时候就要在测试类ClassATest.java中定义

一个还原初始值的方法,并在前面添加标注@Before,表示在每个单元测试之前都执行该方法.

 

@After

作用和@Before是一样的,只是运行的时机不同.

@BeforeClass 和 @AfterClass

原理和@Before和@After是一样的,只是运行的时机是 测试用例初始化时 和 当所有测试执行完毕之后.

 

@Test(timeout = 10000)

设置该方法的超时事件,防止测试的方法出现死循环然后一直卡住.

 

@Test(expected = ArithmeticException.class)

如果测试结果抛出了ArithmeticException异常则是正确的,否则是错误的.

 

@RunWith(XXXX.class)

指定测试代码提交给JUnit框架后用哪个运行器来执行,默认是TestClassRunner.class,但是要注意这个标注是用来修饰类的,不是用来修饰方法的.如果指定了,

整个类下面所有的方法都是用这个运行器.

 

@Suite.SuiteClasses

当我们写了很多很多个测试类,不想每个测试类单独运行,而是打包一次测试,则可以用这个标注.

@Suite.SuiteClasses({ClassATest.class,ClassBTest.class}),但是要注意,此时的运行器必须指定@RunWith(Suite.class)

 

@Parameters

当被测试的ClassA里面的funcA可以有多种输入,并且每种输入会有不要同的输出结果.我们想一次输入不同的参数,然后测试不同的结果.而不是为每种参数情况

写一个测试方法.这个时候就可以用Parameters的标注.

但是我们必须要为测试类ClassATest.java写一个构造方法

public Test(int expected,int input1,int input2)//构造方法,为各个参数赋值,Test中对这3个变量的定义在此省略。
 {
    this.expected=expected;//希望的结果
    this.input1=input1;//输入1
    this.input2=input2;//输入2
  }

并且用标注Parameters

@Parameters
 public  static  Collection  prepareData()
 {
 Object[][] object ={{3,1,2},{-4,-1,-3},{5,0,5}};//对应构造方法中的3个参数
 return Arrays.asList(object);//数组转化成集合形式。
 
 }

此时,在测试函数中就可以用了

 @Test
 public void  TestfuncA()
 {
  assertEquals(this.expected,classa.funcA(this.input1, this.input2));//注意是调用的成员变量。
  
 }

 

posted @ 2014-10-19 19:35  程序小怪兽  阅读(362)  评论(0编辑  收藏  举报