1.JUnit 4 并不要求测试类继承TestCase 父类。
2.在一个测试类中,所有被@Test 注解所修饰的public,void 方法都是test case,
可以被JUnit 所执行。
3.虽然JUnit 4 并不要求测试方法名以test 开头,但我们最好还是按照JUnit 3.8
的要求那样,以test 作为测试方法名的开头。
4.在JUnit 4 中,通过@Before 注解实现与JUnit 3.8 中的setUp 方法同样的功能,
通过@After 注解实现与JUnit 3.8 中的tearDown 方法同样的功能。
public class CaculateTest
{
private Caculate cal;
@Before
public void init()
{
cal=new Caculate();
}
@Test
public void testAdd()
{
cal=new Caculate();
int result=cal.add(1,2);
Assert.assertEquals(3,result);
}
@After
public void destory()
{
}
}
5.在JUnit 4 中,可以使用@BeforeClass 与@AfterClass 注解修饰一个publicstatic
void no-arg 的方法
这样被@BeforeClass 注解所修饰的方法会在所有测试方法执行前执行
被@AfterClass 注解所修饰的方法会在所有测试方法执行之后执行。
这种方法通常执行比较耗时的,并且与测试无关的方法,类似连接数据库
@BeforeClass
public static void globalInit()
{
System.out.println("globalInit invoked!");
}
@AfterClass
public static void globalDestroy()
{
System.out.println("globalDestroy invoked!");
}
timeout 测试超时
@Test(timeout = 1400)
public void testAdd()
{
cal=new Caculate();
int result=cal.add(1,2);
Assert.assertEquals(3,result);
}
expected 测试异常
@Test (expected =Exception.class)
public void testdivid() throws Exception
{
cal=new Caculate();
cal.divide(1,0);
}
6.@Ignore 注解可用于修饰测试类与测试方法,当修饰测试类时,表示忽略掉
类中的所有测试方法;当修饰测试方法时,表示忽略掉该测试方法。
@Test(expected = Exception.class)
//@Ignore("not ready yet")
public void testGetLargest3() throws Exception
{
largest.getLargest(new int[]{});
}
10. 参数化测试(Parameters):当一个测试类使用参数化运行器运行时,
需要在类的声明处加上@RunWith(Parameterized.class)注解,表示该类将不使用JUnit
内建的运行器运行,而使用参数化运行器运行;
在参数化运行类中提供参数的方法上要使用@Parameters 注解来修饰,同时在测试类的构造方法中为各个参数赋值(构造方法是由JUnit 调用的),最后编写测试类,它会根据参数的组数来运行测试多次。
@RunWith(Parameterized.class)
public class ParametersTest
{
private int expected;
private int input1;
private int input2;
@Parameters
public static Collection parameterData()
{
Object [][] objects={{3,1,2},{2,1,1},{4,3,1}};
return Arrays.asList(objects);
}
public ParametersTest(int expected,int input1,int input2)
{
this .expected=expected;
this.input1=input1;
this .input2=input2;
}
@Test
public void testAdd()
{
Caculate caculate=new Caculate();
Assert.assertEquals(this.expected,caculate.add(this .input1,this .input2
));
}
}
11. 在JUnit 4 中, 如果想要同时运行多个测试, 需要使用两个注解:@RunWith(Suite.class)以及@Suite.SuiteClasses(),通过这两个注解分别指定使
用Suite 运行器来运行测试, 以及指定了运行哪些测试类, 其中的
@SuiteClasses 中可以继续指定Suite,这样JUnit 会再去寻找里面的测试类,
一直找到能够执行的Test Case 并执行之。
13. JUnit在TestCase类中应用了适配器(Adapter)模式:
在runBare方法中,通过runTest方法将我们自己编写的testXXX方法进行了适配,使得JUnit可以执行我们自己编写的Test Case,runTest方法的实现如下:
在runTest方法中,首先获得我们自己编写的testXXX方法所对应的Method对象(不带参数),然后检查该Method对象所对应的方法是否是public的,如果是则调用Method对象的invoke方法来去执行我们自己编写的testXXX方法。
14JUnit中要区分错误(error)与失败(failure)
1) 错误指的是代码中抛出了异常等影响代码正常执行的情况,比如抛出了ArrayIndexOutOfBoundsException,这就叫做错误。
2) 失败指的是我们断言所期待的结果与程序实际执行的结果不一致,或者是直接调用了fail()方法,这叫做失败。