gpt4 book ai didi

spring - 正确使用子类化 spring ContextLoader 进行测试

转载 作者:行者123 更新时间:2023-12-02 05:11:38 26 4
gpt4 key购买 nike

对于我的 spring 应用程序与 junit 的集成测试,我将 org.springframework.test.context.ContextLoader 子类化,因为我想使用已经存在的 XmlWebApplicationContext像这样连接我的测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=MyContextLoader.class)
@Transactional
public class MyTest {
@Autowired
public AccountDao accountDao;
}

我的ContextLoader的实现如下:

公共(public)类 MyContextLoader 实现 ContextLoader {

    @Override
public String[] processLocations(Class<?> clazz, String... locations) {
return locations;
}

@Override
public ApplicationContext loadContext(String... locations) throws Exception {
try {
// Start Embedded Tomcat
EmbeddedTomcat tomcat = new EmbeddedTomcat("mas", 8080);
tomcat.launch();

Context rootContext = tomcat.getRootContext();
ContextLoaderListener contextLoaderListener = (ContextLoaderListener) rootContext.getApplicationLifecycleListeners()[0];
XmlWebApplicationContext context = (XmlWebApplicationContext) contextLoaderListener.getContext();


GenericApplicationContext c = new GenericApplicationContext(context);
AnnotationConfigUtils.registerAnnotationConfigProcessors(c);

//context.refresh();
//context.registerShutdownHook();

return context;
}
catch(Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}

loadContext(...) 方法中放置断点时,我可以调用 getBean(AccountDao.class) 并且一切正常。但是,似乎我的测试类实际上没有 Autowiring 。我调试了一点并逐步执行了 spring 代码,似乎在方法 AbstractAutowireCapableBeanFactory.populateBean(String beanName, AbstractBeanDefinition mbd, BeanWrapper bw) 中没有为我的类测试设置 PropertyValues。

也许,我设置的注释处理有误吗?

代码信息:正如您所猜测和看到的,我正在进行集成测试,因此启动了一个嵌入式 tomcat 服务器以测试我的 RESTful web 服务。我的帖子显示了如何从嵌入式 tomcat 获取应用程序上下文:Getting Access to Spring with Embedded Tomcat 6

期待您的回复。埃里克

最佳答案

我认为这里的问题是您正在创建一个新的 GenericApplicationContext,这不是 Spring 用来 Autowiring 测试 bean 的那个。

关于spring - 正确使用子类化 spring ContextLoader 进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5245672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com