【问题标题】:Using @RunWith(SpringJUnit4ClassRunner.class), can you access the ApplicationContext object?使用@RunWith(SpringJUnit4ClassRunner.class),可以访问ApplicationContext对象吗?
【发布时间】:2013-01-27 04:18:51
【问题描述】:
我有一个 Spring 测试使用:
@RunWith(SpringJUnit4ClassRunner.class)
与旧的测试方法不同,从 Spring 测试基类扩展,似乎没有明显的方法可以访问 Spring 使用 @ContextConfiguration 加载的 ApplicationContext
如何从我的测试方法中访问ApplicationContext 对象?
谢谢!
【问题讨论】:
标签:
java
spring
unit-testing
junit
integration-testing
【解决方案1】:
我用这个:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MyClassTest
{
}
然后转到项目构建路径-> Source -> 添加您的applicationContext.xml 的位置
我使用 maven,所以 applicationContext.xml 在 src/main/resources 之下。
如果你使用这个方法,你可以有多个 applicationContext 用于测试
例如:
@ContextConfiguration("classpath:applicationContext_Test.xml")
或
@ContextConfiguration("classpath:applicationContext_V01.xml")
【解决方案2】:
来自 Spring 文档的 Integration Testing 部分
@Autowired ApplicationContext
作为实现 ApplicationContextAware 接口的替代方法,您可以通过字段或 setter 方法上的 @Autowired 注释为您的测试类注入应用程序上下文。例如:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class MyTest {
@Autowired
private ApplicationContext applicationContext;
// class body...
}
【解决方案3】:
添加ApplicationContext的@Autowired属性
@Autowired ApplicationContext applicationContext;