java 测试Sping Boot 库模块

laximzn5  于 2023-06-20  发布在  Java
关注(0)|答案(2)|浏览(118)

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

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() {
    }
}
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles({"default", "test"}) 
public class Test2 {  
    @Autowired
    private String testString; 

    @Test
    public void conextLoaded() {
    }
}

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

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

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

fwzugrvs

fwzugrvs1#

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

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

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

@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都可以自动连接。
dy1byipe

dy1byipe2#

我已经解决了在根测试包路径中添加SpringAppConfiguration类的问题

@SpringBootConfiguration
@ComponentScan
@EnableAutoConfiguration
public class SpringAppConfiguration {

    public static void main(String[] args) {
        SpringApplication.run(SpringAppConfiguration.class, args);
    }
}

相关问题