如何为不同的应用程序运行相同的SpringBootTests

时间:2018-06-22 11:48:51

标签: java spring spring-boot testing

我有一个SpringBoot多模块应用程序,类似这样:

核心 客户1->取决于核心 customer2->取决于核心

我想为两者编写集成测试,但是我不想重复我的核心测试代码。现在,我有了一个带有SpringBootTest(classes = Customer1Application.class)的抽象类和许多测试类,主要用于测试核心功能。

@ContextConfiguration
@SpringBootTest(classes = Customer1Application.class)
@AutoConfigureMockMvc
public abstract class AbstractSpringBootTest
{

@Autowired
protected MockMvc                               mockMvc;

@Autowired
protected Validator                             validator;

...
}

我想检查Customer2应用程序中的更改是否破坏了核心功能,因此我想使用@SpringBootTest(classes = Customer2Application.class)批注运行这些测试。

如何在注释中配置应用程序类?有没有一种方法可以与其他应用程序上下文一起运行测试,而无需手动更改批注或重复所有步骤?

2 个答案:

答案 0 :(得分:0)

我不知道它是否可以工作,但是我会尝试从@SpringBootTest中删除AbstractSpringBootTest,然后定义两个测试类,如下所示:

@SpringBootTest(classes = Customer1Application.class)
class Customer1ApplicationSpringBootTest extends AbstractSpringBootTest {}

@SpringBootTest(classes = Customer2Application.class)
class Customer2ApplicationSpringBootTest extends AbstractSpringBootTest {}

编辑:

所以我挖掘了Spring Boot的源代码,并提出了this solution

基本上,要能够使用系统属性或属性文件来配置应该测试哪个@SpringBootApplication,您需要将类org.springframework.boot.test.context.SpringBootConfigurationFinder的源复制到您自己的测试源根和编辑方法{{1 }}看起来像这样(当然您不必使用Lombok):

private Class<?> scanPackage(String source)

检查整个项目的link

答案 1 :(得分:0)

您检查了吗? @SpringBootTest(classes = {Customer1Application.class,Customer2Application.class})