Spring boot 如何在我的异常类中模拟类?

Spring 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

我必须访问MyException类中的ApplicationContext

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;
    }
}