具有多个模块和多个主类的spring boot项目-单元测试失败
Posted
技术标签:
【中文标题】具有多个模块和多个主类的spring boot项目-单元测试失败【英文标题】:springboot project with multiple module and multiple main class -unit test failing 【发布时间】:2019-02-04 23:38:55 【问题描述】:我正在尝试为具有多个模块的现有应用程序编写单元测试用例,每个模块中都有主类。有不止一个类有\@SpringBootApplication。我编写了一个简单的测试用例,但由于以下错误而失败。我怎样才能继续我的测试用例之一。
java.lang.IllegalStateException: 发现多个 @SpringBootConfiguration 注解的类 [通用 bean: 类 [com.marketshare.ReportingMainClass];范围=;摘要=假; 懒惰初始化=假;自动线模式=0;依赖检查=0; 自动接线候选=真;主要=假;工厂BeanName=空; 工厂方法名=空;初始化方法名=空;销毁方法名=空; 在文件 [C:\My Data\workspace\services2\microservices\Reporting-Microservice\build\classes\java\main\com\marketshare\ReportingMainClass.class], 通用 bean:类 [com.marketshare.SharedMain];范围=; 摘要=假;懒惰初始化=假;自动线模式=0;依赖检查=0; 自动接线候选=真;主要=假;工厂BeanName=空; 工厂方法名=空;初始化方法名=空;销毁方法名=空; 在 URL 中定义 [jar:file:/C:/My%20Data/workspace/services2/microservices/Shared-Module/build/libs/Shared-Module-1.0-SNAPSHOT.jar!/com/marketshare/SharedMain.class]] 在 org.springframework.util.Assert.state(Assert.java:70) 在 org.springframework.boot.test.context.SpringBootConfigurationFinder.scanPackage(SpringBootConfigurationFinder.java:69) 在 org.springframework.boot.test.context.SpringBootConfigurationFinder.findFromPackage(SpringBootConfigurationFinder.java:59) 在 org.springframework.boot.test.context.SpringBootConfigurationFinder.findFromClass(SpringBootConfigurationFinder.java:52)
这里是代码sn-p
@RunWith(SpringRunner.class)
@WebMvcTest(CustomReportController.class)
public class CustomReportControllerTest
我只想对我的控制器进行单元测试。顺便说一句,我是春天世界的新手。
【问题讨论】:
Two Spring Boot projects both with @SpringBootApplication的可能重复 浏览了不同的文档,我了解到@WebMvcTest 足以单独测试控制器。您指定的链接正在使用 \@SpringBootTest 注释并根据我的理解加载完整的上下文。为了对我的控制器进行单元测试并使其快速运行,我只想测试这个控制器。 【参考方案1】:@RunWith(SpringRunner.class) 将加载弹簧上下文。要仅测试控制器,您可以使用
@RunWith(MockitoJUnitRunner.class)
public class CustomReportControllerTest
【讨论】:
谢谢@Vitor。我试过了,它奏效了。它也很快。那么\@RunWith(SpringRunner.class) 和我上面提到的另外两个有什么区别。【参考方案2】:有一个简单的方法,你可以在你的test
源文件夹下创建一个新的Spring Boot Application,比如TestApplication
,就像
src\test\java\com\example\TestApplication.java
@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan("......").
@EnableAsync
public class TestApplication
public static void main(String[] args)
SpringApplication.run(TestApplication.class, args);
并将你的包添加到@ComponentScan
,你可以获得所有的spring boot容量,并且只适用于测试建议。
【讨论】:
【参考方案3】:添加@SpringBootTest @RunWith(SpringRunner.class) @AutoConfigureMockMvc 在测试类和 Autowire MockMvc 上使用这些注解,然后您可以使用 mockMvc.perform 来测试 Controller 方法
【讨论】:
以上是关于具有多个模块和多个主类的spring boot项目-单元测试失败的主要内容,如果未能解决你的问题,请参考以下文章
spring-boot-maven-plugin多模块install问题
spring-boot-maven-plugin多模块install问题