我在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]]
我只想测试控制器的路由。
如何设置特定的应用程序配置?
答案 0 :(得分:2)
您在同一个套餐中不能有两个@SpringBootConfiguration
(@SpringBootApplication
)。 @WebMvcTest
会自动搜索配置源(请参阅the doc)。如果你想调整一些东西但是你不能在同一个包中有两个,你可以在测试的嵌套包中有一个特殊的@SpringBootConfiguration
(或应用程序)。
我不确定该文件是否非常明确,所以我们应该澄清一下。
无论如何,自定义@SpringBootApplication
和切片有点奇怪。 @SpringMvcTest
已经只负责启用必要的内容。如果你想模拟一些bean,你应该不在@SpringBootApplication
中定义它。您导入的常规@Configuration
很好。我们还@MockBean
为您自动模拟内容。