【问题标题】:Load ApplicationContext inside a Junit Integration test在 Junit 集成测试中加载 ApplicationContext
【发布时间】:2025-12-03 08:30:01
【问题描述】:

具有以下配置的配置类将在应用程序启动期间通过组件扫描将应用程序中所有需要的类加载为bean,如下所示:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"package1","package2"}
public MvcConfig implements WebMvcConfigurer {

}

如何在我的 junit 集成测试中加载 webapplication 上下文?尝试了下面的代码,但它不起作用:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { MvcConfig.class })
public class ITtest {

    @Autowired
    private ApplicationContext wac;

    private MockMvc mockMvc;

    @Before
    public void setup() throws Exception {
        this.mockMvc = MockMvcBuilders.webAppContextSetup((WebApplicationContext) this.wac).build();
    }

 }   

我需要创建一个带有 web 应用程序上下文的 mockMVC 实例,如我的设置方法中所示。

我的代码有什么问题。我希望上下文能够加载我的 junit 集成测试中通过 MvcConfig 类的包扫描获得的所有类。

【问题讨论】:

    标签: spring junit integration-testing applicationcontext mockmvc


    【解决方案1】:

    @WebAppConfiguration 是一个类级别的注释,用于声明为集成测试加载的 ApplicationContext 应该是 WebApplicationContext。 测试类上存在@WebAppConfiguration 表示应该使用Web 应用程序根目录的默认路径为测试加载WebApplicationContext。要覆盖默认值,请通过 value 属性指定显式资源路径。

    @WebAppConfiguration Sample

    【讨论】:

    • 现在找到了 MvcConfig.class 并且 junit 正在尝试加载组件扫描中存在的类。但是当代码使用 RealTimePropertyInstance 获取某些属性时,它会失败并出现错误。要包含 jars 和属性以构建 junit 集成测试的路径以成功运行,需要进行哪些更改。
    • 您可以@TestPropertySources 来加载属性。 Maven 负责处理 jar 依赖关系。
    • @Bharat 我们使用 Gradle。我是否还需要通过在 build.gradle 文件的 drpendencies 部分中将依赖项指定为 testcompile 或 testRruntime 来将 jars 添加到集成测试的测试路径中
    • 无论如何,如果 jar 没有添加到构建 Gradle 中。将其添加到测试范围内,构建配置工具将确保 jar 在运行测试时位于类路径中