Java 测试Spring引导库模块
我得到了一个多模块项目,其中不是每个模块都是一个应用程序,但很多模块都是libs。这些lib正在做主要的工作,我想在实现它们的地方测试它们。LIB的当前依赖项:Java 测试Spring引导库模块,java,spring,spring-boot,unit-testing,automated-tests,Java,Spring,Spring Boot,Unit Testing,Automated Tests,我得到了一个多模块项目,其中不是每个模块都是一个应用程序,但很多模块都是libs。这些lib正在做主要的工作,我想在实现它们的地方测试它们。LIB的当前依赖项: implementation 'org.springframework.boot:spring-boot-starter' testImplementation 'org.springframework.boot:spring-boot-starter-test' 在主源代码中有一个带有@Configuration的类和一个bean:
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"; }
我有两个测试班:
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles({"default", "test"})
public class Test1 {
@Test
public void conextLoaded() {
}
}
-
第一次测试有效。第二种情况并非如此。该项目中没有@SpringBootApplication
,因此在与测试相同的包中,我添加了一个测试配置:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.to.config")
public class LibTestConfiguration {
}
而且它不起作用。对于
@Service
的类也一样。它们不在上下文中。我怎样才能使它像一个普通的Spring启动应用程序一样运行,而不实际运行,并从我需要的配置文件中加载配置和上下文?默认配置文件和测试配置文件共享它们的大部分属性(目前),我希望它们像启动tomcat一样被加载。我切换到JUnit 5并使其工作起来。。。因此,如果您想测试数据库内容:
@DataMongoTest
@ExtendWith(SpringExtension.class)
@ActiveProfiles({"default", "test"})
class BasicMongoTest { ... }
- 用于自动关联所有存储库和mongo模板
- 使用aplication.yml config初始化
- 不初始化或配置拦截器
如果类路径中有一个类具有
@SpringBootApplication
(在测试上下文中可以是空的测试主节点),则进行完整的应用程序上下文测试
- 使用所有配置和bean初始化完整上下文
- 如果没有必要,就不应该这样做,因为它加载了所有的应用程序上下文,并且有点违背了单元测试只激活所需内容的目的
仅测试特定组件和配置:
@SpringBootTest(classes = {Config1.class, Component1.class})
@EnableConfigurationProperties
@ExtendWith(SpringExtension.class)
@ActiveProfiles({"default", "test"})
public class SpecificComponentsTest { ... }
- 仅使用Config1和Component1类初始化上下文。Component1和Config1中的所有bean都可以自动连接
@extendedwith(SpringExtension.class)
在使用@SpringBootTest
时是多余的
@SpringBootTest
@ExtendWith(SpringExtension.class)
@ActiveProfiles({"default", "test"})
public class FullContextTest { ... }
@SpringBootTest(classes = {Config1.class, Component1.class})
@EnableConfigurationProperties
@ExtendWith(SpringExtension.class)
@ActiveProfiles({"default", "test"})
public class SpecificComponentsTest { ... }