在Spring Boot 1.4中排除@WebMvcTest时的配置

时间:2016-12-20 05:24:06

标签: spring spring-boot spring-mvc-test

我在java/目录(同一个包)中有一个@SpringBootApplication类,在test/中有一个@SpringBootApplication类用于模拟一些自动连接的bean。有几个测试,使用的配置因测试而异。

在测试课程中

@RunWith(SpringRunner.class)
@WebMvcTest(RecApiServerController.class)

引发

java.lang.IllegalStateException: Found multiple @SpringBootConfiguration annotated classes [Generic bean: class [com.xxx.MockedTestConfig]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in file [/..direction.../target/test-classes/com/xxx/MockedTestConfig.class], Generic bean: class [com.xxx.MyApplication]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in file [/...direction.../target/classes/com/xxx/MyApplication.class]]

我只想测试控制器的路由。

如何设置特定的应用程序配置?

1 个答案:

答案 0 :(得分:2)

您在同一个套餐中不能有两个@SpringBootConfiguration@SpringBootApplication)。 @WebMvcTest会自动搜索配置源(请参阅the doc)。如果你想调整一些东西但是你不能在同一个包中有两个,你可以在测试的嵌套包中有一个特殊的@SpringBootConfiguration(或应用程序)。

我不确定该文件是否非常明确,所以我们应该澄清一下。

无论如何,自定义@SpringBootApplication和切片有点奇怪。 @SpringMvcTest已经只负责启用必要的内容。如果你想模拟一些bean,你应该@SpringBootApplication中定义它。您导入的常规@Configuration很好。我们还@MockBean为您自动模拟内容。