具有多个模块和多个主类的springboot项目-单元测试失败

时间:2018-08-30 05:55:07

标签: spring unit-testing spring-boot gradle

我正在尝试为具有多个模块的现有应用程序编写单元测试用例,每个模块中都有主类。有多个类具有\ @SpringBootApplication。我编写了一个简单的测试用例,但失败并出现以下错误。我如何继续其中之一的测试用例。

  

java.lang.IllegalStateException:发现多个   @SpringBootConfiguration注释的类[泛型bean:类   [com.marketshare.ReportingMainClass]; scope =; abstract = false;   lazyInit = false; autowireMode = 0; dependencyCheck = 0;   autowireCandidate = true; primary = false; factoryBeanName = null;   factoryMethodName = null; initMethodName = null; destroyMethodName = null;   在文件[C:\ My中定义   数据\工作区\ services2 \微服务\ Reporting-Microservice \ build \ classes \ java \ main \ com \ marketshare \ ReportingMainClass.class],   通用bean:类[com.marketshare.SharedMain]; scope =;   abstract = false; lazyInit = false; autowireMode = 0; dependencyCheck = 0;   autowireCandidate = true; primary = false; factoryBeanName = null;   factoryMethodName = null; initMethodName = null; destroyMethodName = null;   在URL中定义   [jar:文件:/ 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)

这是代码段

@RunWith(SpringRunner.class)
@WebMvcTest(CustomReportController.class)
public class CustomReportControllerTest {

}

我只想对控制器进行单元测试。顺便说一句,我是春季世界的新手。

3 个答案:

答案 0 :(得分:1)

@RunWith(SpringRunner.class)将加载spring上下文。要仅测试控制器,可以使用

@RunWith(MockitoJUnitRunner.class)
public class CustomReportControllerTest {

}

答案 1 :(得分:0)

有一种简单的方法,您可以在TestApplication源文件夹下创建一个test的新Spring Boot应用程序,就像

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功能,并且仅适用于测试建议。

答案 2 :(得分:0)

添加@SpringBootTest @RunWith(SpringRunner.class) @AutoConfigureMockMvc 在测试类和Autowire MockMvc上使用这些注释,然后可以使用mockMvc.perform测试Controller方法