项目工程基于Idea IDE创建,其对JUnit对支持非常不错,写单元测试类也非常方便,直接使用快捷键Ctrl+Shift+T即可自动生成相应的单元测试类模板,使用快捷键Alt+Insert可直接添加新增的单元测试方法;另外本项目使用Gradle进行依赖管理。
为什么做单元测试:
1.帮助理解需求
单元测试应该反映Use Case,把被测单元当成黑盒测试其外部行为。
2.提高实现质量
单元测试不保证程序做正确的事,但能帮助保证程序正确地做事,从而提高实现质量。
3.测试成本低
相比集成测试、验收测试,单元测试所依赖的外部环境少,自动化程度高,时间短,节约了测试成本。
4.反馈速度快
单元测试提供快速反馈,把bug消灭在开发阶段,减少问题流到集成测试、验收测试和用户,降低了软件质量控制的成本。
5.利于重构
由于有单元测试作为回归测试用例,有助于预防在重构过程中引入bug。
6.文档作用
单元测试提供了被测单元的使用场景,起到了使用文档的作用。
7.对设计的反馈
一个模块很难进行单元测试通常是不良设计的信号,单元测试可以反过来指导设计出高内聚、低耦合的模块。
JUnit简介
JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。
单元测试规范
1.单元测试类后面加Test;
2.测试方法使用@Test标注;
3.测试方法名之前加test;
4.所有测试方法返回类型必须为void且无参数;
5.每个测试方法之间相互独立;
JUnit4常用注解
@Test:把一个方法标记为测试方法
它有两个常用属性:
1.excepted属性是用来测试异常;
2.timeout用来测试性能的,是测试一个方法能不能在规定时间内完成;
也可使用@Rule规则来规定测试类中的所有方法的超时时间,如果类中的任意一个方法执行时间超过了在Timeout规则中规定的值,测试方法将抛出异常,测试结果为失败(超时参数是以毫秒记)。如:
@Rule
public Timeout timeout = new Timeout(1000);
@Before:每一个测试方法执行前自动调用一次;
@After:每一个测试方法执行完自动调用一次;
@BeforeClass:所有测试方法执行前执行一次,在测试类还没有实例化已经被加载,所以用static修饰;
@AfterClass:所有测试方法执行完执行一次,在测试类还没有实例化已经被加载,所以用static修饰;
@Ignore:禁止执行junit测试类的某些或者全部测试方法,应用在方法或类上;
public class AnnotationTest {
int i;
public AnnotationTest(){
System.out.println("构造方法");
}
@BeforeClass
public static void setUpBeforClass(){
System.out.println("BeforClass");
}
@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");
System.out.println("i="+i++);
}
@Test
public void test2(){
System.out.println("Test2");
System.out.println("i="+i++);
}
@Ignore
public void test3(){
System.out.println("Test3");
}
}
输出结果:
BeforClass
构造方法
Before
Test2
i=0
After
AfterClass