构建Spring 应用以后呢,编写单元测试就显得比较麻烦了,由于绝大部分的类都交给了spring托管了,须要人为的去加载spring的配置文件等等,或者须要编码去从spring 哪里获得某个类的实例等。
java
1.1 整合SpringTest以前的单元测试编码spring
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 会被自行导入。maven
<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) } }