gpt4 book ai didi

java - 在 Spring 中排除单元测试 @Configurations 的最佳方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:16:38 24 4
gpt4 key购买 nike

在我的 Spring Boot 项目中,我有一个用 @SpringBootConfiguration 注释的主类。我还有一些使用 @SpringApplicationConfiguration 的单元测试,它指向一个内部类,该内部类定义了一个 Spring 上下文以供在我的单元测试中使用(使用一些模拟)。

我现在想编写一个集成测试来启动我的应用程序的完整上下文。但是,这不起作用,因为它还会获取在其他单元测试中定义为内部类的 Spring 上下文。

避免这种情况的最佳方法是什么?我确实在 @SpringBootConfiguration 上看到了 excludeexcludeName 属性,但我不确定如何使用它们。

更新:

一些代码来更多地解释问题:

我的主课:

package com.company.myapp;

@SpringBootApplication
@EnableJpaRepositories
@EnableTransactionManagement
@EntityScan(basePackageClasses = {MyApplication.class, Jsr310JpaConverters.class})
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}

我有一个 Spring REST Docs 的单元测试:

package com.company.myapp.controller

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration
@WebAppConfiguration
public class SomeControllerDocumentation {

@Rule
public final RestDocumentation restDocumentation = new RestDocumentation("target/generated-snippets");

// Some test methods here


// Inner class that defines the context for the unit test
public static class TestConfiguration {
@Bean
public SomeController someController() { return new SomeController(); }

@Bean
public SomeService someService() { return new SomeServiceImpl(); }

@Bean
public SomeRepository someRepository() { return mock(SomeRepository.class);
}

所以单元测试使用了内部类中定义的上下文。现在我想要一个不同的测试来测试应用程序的“正常”应用程序上下文是否启动:

package com.company.myapp;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(MyApplication.class)
@WebAppConfiguration
public class MyApplicationTest {

@Autowired
private ApplicationContext applicationContext;

@Test
public void whenApplicationStarts_thenContextIsInitialized() {
assertThat(applicationContext).isNotNull();
}

}

这个测试现在不仅会连接它应该连接的东西,还会连接来自 SomeControllerDocumentation.TestConfiguration 内部类的 bean。我想避免这种情况。

最佳答案

您可以使用配置文件:使用 @Profile("unit-test")@Profile("integration-test") 注释相关配置 bean,并在测试通过 @ActiveProfiles 指定哪个配置文件应该处于 Activity 状态。

但是,听起来您只需重新组织配置结构就可以完全避免这个问题。不过,如果没有看到任何代码,就很难做出任何假设。

关于java - 在 Spring 中排除单元测试 @Configurations 的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34440516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com