相信各位程序猿在开发过程中都会使用junit,
一下就是我对于junit的个人总结:
Junit 单元测试能够很轻易的对单个类进行测试,相对于在每个类中增加了一个main方法,它是一种无状态或者状态确定的单元测试,对于测试含有大量的复杂的类之间有依赖关系的测试,还是比较麻烦,而spring mvc提供了大量类之间的管理,使类之间的关系完全透明化,显然,如果junit4 能够支持spring mvc的单元测试,那么无疑给开发带来了效率的极大提高。目前junit4 能够不但能够支持spring ioc的单元测试还能够支持spring mvc的测试。
下面介绍如何通过junit4 对spring ioc进行单元测试
maven依赖包
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
测试类
<pre name="code" class="java">/**
* @filename User.java
* @date 2016年10月26日
*/
package com.mjkf.demo.domain.model;
/**
* @author farrell
* @date 2016年10月26日
*/
public class User {
private Integer id;
private Integer userId;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", userId=" + userId + ", name=" + name + ", age=" + age + "]";
}
}
然后就是spring的配置文件,以下就不做过多的介绍了
直接上junit代码
/**
* @filename MainTest.java
* @version www.mindai.com
* @date 2016年10月25日
*/
package test.mjkf;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.mjkf.demo.domain.model.User;
import com.mjkf.demo.service.IUserService;
import com.mjkf.framework.mybatis.mapper.entity.Example;
import com.mjkf.framework.mybatis.mapper.entity.Example.Criteria;
/**
* @author farrell
* @date 2016年10月25日
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:spring/applicationContext.xml" })
public class MainTest {
@Autowired
IUserService userService;
@Test
public void test(){
List<User> users = userService.findAll();
for (User user : users) {
System.out.println(user.toString());
}
}
}
整理一下junit注解的含义
@Test:使用该注解的方法为测试方法,自动运行时能够识别并被执行
包含两个参数:expected=XXXException.class 期望出现的异常
timeout=xxx 设定程序运行的超时时间
@Ignore:被忽略的测试方法
@Before:在每个测试方法之前运行
@After: 在每个测试方法之后运行
@BeforeClass:在所有测试开始之前运行
@AfterClass:在所有测试开始之后运行
以上几个就是Junit 4的关键注解,熟练使用这几个注解,将来的测试用例编写肯定能事半功倍。
注意:@Before与@BeforeClass的区别
@Before会加在每个方法前执行,即有几个@Test就会执行几遍。
@BeforeClass 只在所有测试之前执行,只会执行一次。并且@BeforeClass修饰的方法必须是公有的静态方法(public static )。
@After和@AfterClass也类似
每个测试类中这四个注解不能重复使用,一个方法只能从这四个注解中挑选其中一个。