我正在使用TestNG和spring-test编写单元测试,该单元测试通过@ContextConfiguration
加载xml上下文,并通过@WebAppConfiguration
加载调度程序servlet。我有一个像blow这样的类,它获取上下文并打印上下文类型。
@Component
public class ApplicationContextInitializer implements ApplicationContextAware {
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
ApplicationContextInitializer.applicationContext = applicationContext;
if (applicationContext instanceof AnnotationConfigApplicationContext) {
System.out.println("1");
}
if (applicationContext instanceof GenericWebApplicationContext) {
System.out.println("3");
}
if (applicationContext instanceof GenericXmlApplicationContext) {
System.out.println("4");
}
if (applicationContext instanceof ResourceAdapterApplicationContext) {
System.out.println("5");
}
if (applicationContext instanceof StaticApplicationContext) {
System.out.println("6");
}
if (applicationContext instanceof XmlWebApplicationContext) {
System.out.println("7");
}
if (applicationContext instanceof AnnotationConfigWebApplicationContext) {
System.out.println("8");
}
}
}
测试类:
@ContextConfiguration(value = "classpath:integration-context-test.xml")
@TestPropertySource(locations = {"classpath:temp.properties"})
@WebAppConfiguration
public class TaskTest extends AbstractTransactionalTestNGSpringContextTests {}
为什么控制台显示"3"
并显示GenericWebApplicationContext
?什么时候会返回提到的其他两种类型?使用TestNG时是否可以通过书面XmlWebApplicationContext
类获得ApplicationContextInitializer
?
答案 0 :(得分:0)
为什么控制台显示
"3"
并显示为GenericWebApplicationContext
?
在使用 Spring TestContext Framework 的集成测试中,如果用ApplicationContext
注释测试类,则GenericWebApplicationContext
是@WebAppConfiguration
。否则,它将是GenericApplicationContext
。
集成测试的ApplicationContext
由ContextLoader
加载。在您的示例中,具体实现为GenericXmlWebContextLoader
。这是因为您为XML配置文件指定了locations
。
何时会返回提到的其他两种类型?
在集成测试中,它不会返回您提到的其他类型,因为 Spring TestContext Framework 中的所有ContextLoader
实现都会创建GenericApplicationContext
或{ {1}}。
使用TestNG时是否可以通过书面
GenericWebApplicationContext
类获得XmlWebApplicationContext
?
不,不在测试中。
但是您通常不需要依赖它为ApplicationContextInitializer
。知道它是XmlWebApplicationContext
(因此是ConfigurableWebApplicationContext
)通常在生产代码和测试中就足够了。