JUnit 简介
JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。
单元测试规范
单元测试类后面加Test;
测试方法使用@Test标注;
测试方法名之前加test;
每个测试方法之间相互独立;
所有测试方法返回类型必须为void且无参数(这条必须遵守,不然运行测试要报错)
JUnit4常用注解
注解 | 注解位置 | 功能 |
---|---|---|
@Test | 方法 | 有两个属性:1.excepted属性是用来测试异常; 2.timeout用来测试性能的,就是测试一个方法能不能在规定时间内完成; |
@Rule | 成员变量,方法(都必须是共有非静态) | Rule是JUnit4中的新特性,它让我们可以扩展JUnit的功能,灵活地改变测试方法的行为。JUnit中用@Rule和@ClassRule两个注解来实现Rule扩展,这两个注解需要放在实现了TestRule借口的成员变量(@Rule)或者静态变量(@ClassRule)上。@Rule和@ClassRule的不同点是,@Rule是方法级别的,每个测试方法执行时都会调用被注解的Rule,而@ClassRule是类级别的,在执行一个测试类的时候只会调用一次被注解的Rule。可以设置单个或多个规则,比如Timeout,RuleChain等 |
@Before | 方法 | 每个测试方法执行前自动调用一次 |
@After | 方法 | 每一个测试方法执行完自动调用一次 |
@BeforeClass | 方法 | 所有测试方法执行前执行一次,在测试类还没有实例化就已经被加载,所以用static修饰 |
@AfterClass | 方法 | 所有测试方法执行完执行一次,在测试类还没有实例化就已经被加载,所以用static修饰; |
@Ignore | 方法,类 | 不执行某个测试类或者测试方法 |
- 测试@BeforeClass等执行顺序
public class AnnotationTest {
public AnnotationTest(){
System.out.println("构造方法");
}
@BeforeClass
public static void setUpBeforeClass(){
System.out.println("BeforeClass");
}
@AfterClass
public static void tearDownAfterClass(){
System.out.println("AfterClass");
}
@Before
public void setUp(){
System.out.println("Before");
}
@After
public void tearDown(){
System.out.println("After");
}
@Test
public void test1(){
System.out.println("Test1");
}
@Test
public void test2(){
System.out.println("Test2");
}
@Ignore
public void test3(){
System.out.println("Test3");
}
}
输出:
BeforeClass
构造方法
Before
Test1
After
构造方法
Before
Test2
After
AfterClass
- Timeout测试(超时直接抛出异常)
public class Example1 {
@Rule()
public Timeout t = new Timeout(100, TimeUnit.MILLISECONDS);
@Test
public void t1() throws Exception
{
Thread.sleep(200);
assertEquals(1, 2);
}
}
常用断言方法
断言方法 | 作用 |
---|---|
assertTrue | 检查条件是否为真 |
assertFalse | 检查条件是否为假 |
fail | 在没有报告的情况下使测试不通过 |
assertEquals | 检查相等 |
assertNotEquals | 检查不等 |
assertArrayEquals | 检查Array是否相等 |
assertNotNull | 检查是否非空 |
assertNull | 检查是否为空 |
assertSame | 检查对象引用是否相等 |
assertNotSame | 检查对象引用是否不等 |
assertThat | 检查对象是否符合匹配器匹配的条件。org.hamcrest.CoreMatchers中有很多断言方法,比如any,not,equalTo等 |
创建测试套件
套件测试类,让这些类按注解的顺序执行,而不是单独运行每个测试。
@RunWith(Suite.class)
@Suite.SuiteClasses({ PrepareMyBagTest.class, AddPencilsTest.class })
public class SuitTest {
}