gpt4 book ai didi

java - 测试 Spring Boot 库模块

转载 作者:行者123 更新时间:2023-12-02 09:28:20 25 4
gpt4 key购买 nike

我有一个多模块项目,其中并非每个模块实际上都是应用程序,但其中很多都是库。这些库正在完成主要工作,我想在它们的实现位置测试它们。库的当前依赖项:

implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'

主要源代码中有一个带有 @Configuration 和单个 bean 的类:

@Bean public String testString() { return "A Test String"; }

我有 2 个测试类(class):

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles({"default", "test"})
public class Test1 {

@Test
public void conextLoaded() {
}
}

-

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles({"default", "test"})
public class Test2 {
@Autowired
private String testString;

@Test
public void conextLoaded() {
}
}

第一个测试有效。第二个没有。该项目中的任何位置都没有 @SpringBootApplication,因此在与测试相同的包中我添加了测试配置:

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.to.config")
public class LibTestConfiguration {
}

而且它不起作用。对于 @Service 类也是如此。它们不在上下文中。我怎样才能让它像一个普通的 Spring boot 应用程序一样运行,而不需要它真正成为一个应用程序并从我需要的配置文件中加载配置和上下文?默认配置文件和测试配置文件共享它们的大部分属性(目前),我希望它们像启动 tomcat 一样加载。

最佳答案

我切换到 JUnit 5 并让它有点工作......所以如果你想测试数据库的东西:

@DataMongoTest
@ExtendWith(SpringExtension.class)
@ActiveProfiles({"default", "test"})
class BasicMongoTest { ... }
  • 允许您 Autowiring 所有存储库和 mongo 模板
  • 使用 aplicaton.yml 配置初始化
  • 不初始化或配置拦截器
<小时/>

完整的应用程序上下文测试,如果您的类路径中有一个带有 @SpringBootApplication 的类(可以是测试上下文中的空测试主函数)

@SpringBootTest
@ExtendWith(SpringExtension.class)
@ActiveProfiles({"default", "test"})
public class FullContextTest { ... }
  • 使用所有配置和 Bean 初始化完整上下文
  • 如果没有必要,就不应该这样做,因为它会加载所有应用程序上下文,并且有点违背了单元测试仅激活所需内容的目的。
<小时/>

仅测试特定组件和配置:

@SpringBootTest(classes = {Config1.class, Component1.class})
@EnableConfigurationProperties
@ExtendWith(SpringExtension.class)
@ActiveProfiles({"default", "test"})
public class SpecificComponentsTest { ... }
  • 仅使用 Config1 和 Component1 类初始化上下文。 Component1 和 Config1 中的所有 bean 都可以 Autowiring 。

关于java - 测试 Spring Boot 库模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58175467/

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