Junit 是一个 java 的单元测试框架,已经成为了最成功的一个单元测试框架了,多数 java 开发环境都已经集成了 JUnit 作为单元测试工具
实现自动的单元测试可以大大地提高开发效率,虽然在编写测试代码时需要消耗很多精力,但是对于整个项目的稳定和健壮还是很值得的
JUnit4 是 Junit 框架有史以来最大的一次改进,主要目标是使用注解特性简化测试用例的编写
如果要在 Spring 项目中使用 JUnit,就需要在 pom.xml 中定义依赖:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
待测试类
package junit;
public class Calculate {
public int add(int a, int b) {
return a + b;
}
public int minus(int a,int b) {
return a - b;
}
public int div(int a,int b) {
return a / b;
}
}
我们编写了一个简单的计算加减的计算器类,接下来,我们为他编写单元测试类
Junit4 测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:applicationContext.xml"})
public class CalculateTest {
private Calculate cal ;
public CalculateTest()
{
System.out.println("创建了CalculateTest类的实例");
}
@Before
public void init() throws Exception {
cal = new Calculate();
System.out.println("测试方法前调用@Befored");
}
@After
public void close() throws Exception {
System.out.println("测试方法后调用@After");
}
@Test
public void doAdd() {
Assert.assertEquals(cal.add(1, 2), 3);
}
@Test
public void testMinus() {
Assert.assertEquals(cal.minus(2, 1), 1);
}
}
- @RunWith 注解指定用于测试的工具类
- @ContextConfiguration 注解指定测试前需要加载的配置
- @Before 注解的方法会在测试方法调用前被调用
- @After 注解的方法会在测试方法调用后被调用
- @Test 注解的方法就是测试方法
- @BeforeClass 注解的方法必须是 static void 方法,会在所有测试方法前只执行一次,一般用来初始化公用的重要资源
- @AfterClass 注解的方法必须是 static void 方法,会在所有测试方法后只执行一次,一般用来释放公共资源
- @ignore 注解的方法在测试中会被忽略,通常用来放在还未实现的方法测试方法上,如 @lgnore("该方法还没有实现"),在测试脚本执行时,会直接显示:该方法还没有实现
Assert.assertEquals 是比较两个参数的值是否相等,如果不相等则会报错,他的三个参数的重载版本提供了多出的第一个 String 参数,当报错时输出第一个 String 参数作为错误信息的一部分
Assert 类是 Junit 提供的断言类,他提供了很多 static 方法用来实现“若XXX则报错”的断言功能:
- assertTrue
- assertFalse
- assertEquals
- assertNotNull
- assertNull
- assertSame
- assertNotSame
对于上面的计算器类中的 div 方法,有可能抛出除数为零异常,这时,我们需要在测试时期望异常的抛出:
@Test(expected=ArithmeticException.class)
public void testDiv() {
cal.div(5, 0);
}
我们还可以通过 timeout 参数设置测试方法的最长执行时间,用来限制方法的超时情况
@Test(timeout=1)
public void testMinus() {
assertEquals(cal.minus(2, 1), 1);
}
欢迎关注微信公众号,以技术为主,涉及历史、人文等多领域的学习与感悟,每周三到七篇推文,只有全部原创,只有干货没有鸡汤

技术帖
技术分享
java
framework
spring
测试
junit
单元测试
test