问题描述
我有一个要求,我必须在 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 (将#修改为@)