如何解决如何在非 spring 托管类的单元测试类中获取 ApplicationContext
我有一个要求,我必须在 POJO 类中使用 Spring bean 来检索 MyDomainClass 对象。由于在不受 Spring 管理的类中自动装配 bean 是不可能的,因此我必须从另一个 util 类中显式获取 ApplicationContext 并从 applicationContext 对象中检索 bean。请找到下面的代码
@Component
public class ApplicationContextUtils implements ApplicationContextAware{
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext appContext)
throws BeansException {
applicationContext = appContext;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
}
使用 applicationContext 和检索 bean 的代码如下
public class MyNonBeanClass{
public MyDomainClass retrieveMyDomainObj(){
ApplicationContext applicationContext=ApplicationContextUtils.getApplicationContext();
TestBean testBean=(TestBean)applicationContext.getBean("testBean");
return testBean.retrieve(param1,param2);
}
}
此代码按预期工作,我能够成功地从应用程序上下文中获取 bean。但至少可以说,编写测试用例具有挑战性。我什至不确定我们是否能够为我的非 bean 类编写测试用例,但我仍然想尝试。我正在尝试使用 PowerMock 来模拟 ApplicationContextUtils 中 getApplicationContext() 的静态调用。但是我无法获得获取 TestBean 对象所需的 applicationContext 。当在 applicationContext 上调用 getBean() 时会抛出 NullPointerException。请帮忙解决这个问题。
@RunWith(PowerMockRunner.class)
@PrepareForTest(ApplicationContextUtils.class)
@ContextConfiguration(classes= { BaseTestContext.class})
public class MyNonBeanClassTest implements ApplicationContextAware{
MyNonBeanClass myNonBeanClass;
ApplicationContext applicationContext;
@Test
public void test_retrieveMyDomainObj(){
myNonBeanClass=new MyNonBeanClass();
PowerMockito.mockStatic(ApplicationContextUtils.class);
when(ApplicationContextUtils.getApplicationContext()).thenReturn(applicationContext);
assertNotNull(myNonBeanClass.retrieveMyDomainObj(param1,param2));
}
@Override
public void setApplicationContext(ApplicationContext appContext) throws BeansException {
// TODO Auto-generated method stub
this.applicationContext=appContext;
}
public ApplicationContext getApplicationContext(){
return this.applicationContext;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。