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));//注意是调用的成员变量。 }