发现通过Spring进行对象管理之后,做测试变得复杂了。因为所有的Bean都需要在 applicationContext.xml中加载好,之后再通过@Resource去取得。如果每次都要整个业务流做的差不多了再去测试,这样效率很 低,也很麻烦。如果单独去写一个测试用类,这样太繁琐了。于是想起Spring有一个测试框架,能够整合JUnit进行测试.
我们给所有的测试类,书写一个公共的父类。这样使用的时候直接拿出来使用就好了!
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:springmvc-servlet-test.xml", "classpath:application-context-datasource-test.xml",
"classpath:springbeans/mq-beans-test.xml","classpath:springbeans/ws-beans-test.xml","classpath:springbeans/task-beans-test.xml"})
public class JUnitServiceBase extends AbstractJUnit4SpringContextTests {
}
测试类应该继承与 AbstractJUnit4SpringContextTests 或 AbstractTransactionalJUnit4SpringContextTests
对于 AbstractJUnit4springcontextTests 和 AbstractTransactionalJUnit4SpringContextTests 类的选择:
如果再你的测试类中,需要用到事务管理(比如要在测试结果出来之后回滚测试内容),就可以使用AbstractTransactionalJUnit4SpringTests类。 事务管理的使用方法和正常使用Spring事务管理是一样的。再此需要注意的是,如果想要使用声明式事务管理,即使用 AbstractTransactionalJUnitSpringContextTests类,请在applicationContext.xml文件 中加入transactionManager bean:
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
如果没有添加上述bean,将会抛出NoSuchBeanDefinitionException,指明 No bean named ‘transactionManager’ is definded.
添加如下内容在class前,用于配置applicationContext.xml文件的位置。Spring的配置文件,这样直接通过@Resource直接就可以使用啦!
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
然后就是可以简单的使用啦,非常的容易使用,直接继承我们的父类就好了,就是这么的好玩哦!
<!-- 测试使用,打包时不会打进去 -->
<!-- Sprint-test 相关测试包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>3.2.11.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
<scope>test</scope>
</dependency>
<!-- log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.1</version>
</dependency>