构建Spring 应用之后呢,编写单元测试就显得比较麻烦了,因为绝大部分的类都交给了spring托管了,需要人为的去加载spring的配置文件等等,或者需要编码去从spring 哪里得到某个类的实例等。
1.1 整合SpringTest之前的单元测试编码
public class TestDemo {
private static DBDao dbDao;
private Object[] testData;
@BeforeClass
public static void setUpBeforeClass() throws NamingException {
// Initialize Spring Context
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
dbDao= context.getBean(DBDao .class);
}
@AfterClass
public static void tearDownAfterClass() {}
@Before
public void setUp() {
//prepare test data here
testData = {.........};
}
@After
public void tearDown() {
}
@Test
public void testSave() {
dbDao.save(testData)
}
}
使用SpringTest整个JUnit,也是把Junit的框架整合到Spring容器中,交给spring来托管了,是代码更简洁,同时 SpringTest 也提供了许多组件的支持 比如 JDBC的测试, JNDI的测试,以及很多的Mock方法,足以满足J2EE的单元测试的需要了。
编写单元测试 需要 Junit 和SpringTest的jar包依赖,maven构建工具会自行解决依赖关系,所以 SpringTest 依赖的 SpringCore 会被自行导入。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${project.dependency.org.junit}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${project.dependency.spring.core}</version>
<scope>test</scope>
</dependency>
与常规的测试类的区别在于,使用了注解RunWith(SpringJUnit4ClassRuner.class)来声明使用Spring的 TestRunner类,同时呢使用ContextConfiguration注解 来声明 需要加载的 配置文件的路劲,这样一来就可以不用自行编码去加载配置文件啦。
同时我们还可以发现 测试依赖的类 也被打上注解@Autowired 实行自动装填。
整体的结构很简洁了。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-config-test.xml")
public class TestDemo {
@Autowired
private DBDao dbDao;
private Object[] testData;
@BeforeClass
public static void setUpBeforeClass() throws NamingException {}
@AfterClass
public static void tearDownAfterClass() {}
@Before
public void setUp() {
//prepare test data here
testData = {.........};
}
@After
public void tearDown() {
}
@Test
public void testSave() {
dbDao.save(testData)
}
}
SpringFramework4系列之SpringTest:(一)Spring4整合Junit
原文:http://my.oschina.net/u/1041012/blog/477856