Spring boot 如何在我的异常类中模拟类?
我必须访问MyException类中的ApplicationContextSpring boot 如何在我的异常类中模拟类?,spring-boot,unit-testing,mockito,Spring Boot,Unit Testing,Mockito,我必须访问MyException类中的ApplicationContext public class MyException extends Exception { public MyException(Map<String, Map<String,String>> errorObj) throws IOException { ApplicationContext applicationContext = ApplicationContex
public class MyException extends Exception {
public MyException(Map<String, Map<String,String>> errorObj) throws IOException {
ApplicationContext applicationContext = ApplicationContextProvider.getApplicationContext();
Environment env = applicationContext.getEnvironment();
...
}
}
编辑这是ApplicationContextProvider
public class ApplicationContextProvider implements ApplicationContextAware {
private static ApplicationContext context;
public static ApplicationContext getApplicationContext(){
return context;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
}
当我运行unittest时,我在ApplicationContext上得到了NullPointerException。我想模拟ApplicationContext如何执行此操作
我只在单元测试中发现了这个错误,但当我使用spring boot运行时:run it work fine您可以在测试类中使用注释,该注释创建一个包含测试所需所有对象的应用程序上下文。什么是ApplicationContextProvider?我已经添加了更多详细信息,我猜ApplicationContextProvider是一个spring bean(它有一个弹簧注释)但是MyException不是一个bean。所以你不能在MyException类中自动连接它。另外,由于测试类中没有加载应用程序上下文,getApplicationContext方法返回null。另一个问题是,由于getApplicationContext是一个静态方法,你不能使用mockito模拟它,你需要使用powermockito。是的,我知道我可以仅在spring容器类内使用@autowire,但我通过ApplicationContextProvider类在spring容器外获得bean运行spring boot时工作正常:run您可以解释为什么希望从异常中访问应用程序上下文和环境吗?您有示例吗?
public class ApplicationContextProvider implements ApplicationContextAware {
private static ApplicationContext context;
public static ApplicationContext getApplicationContext(){
return context;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
}