2016-12-20 5 views
0

ich eine @SpringBootApplication Klasse in java/ Verzeichnis (die gleiche Paket) und eine andere @SpringBootApplication Klasse habe in test/ für einige Autos-verdrahteten Bohnen spöttisch. Es gibt mehrere Tests und die verwendete Konfiguration variiert von Test zu Test.Ausschließen eine Konfiguration, wenn @WebMvcTest im Frühjahr Boot-1.4

Und in einer Testklasse

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

wirft

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]] 

I Routing eines Controllers nur testen möchten.

Wie kann ich eine spezifische Anwendungskonfiguration?

Antwort

2

Sie nicht zwei @SpringBootConfiguration (@SpringBootApplication) im gleichen Paket haben kann. @WebMvcTest sucht automatisch die Quelle der Konfiguration für Sie (siehe the doc). Sie können eine spezielle (oder Anwendung) in einem verschachtelten Paket Ihres Tests haben, wenn Sie Dinge tun wollen, aber Sie können nicht zwei im selben Paket haben.

Ich bin nicht sicher, ob das Dokument sehr explizit ist, also sollten wir es wahrscheinlich klären.

Wie auch immer, eine benutzerdefinierte @SpringBootApplication und Schneiden ist ein bisschen komisch. @SpringMvcTest kümmert sich schon darum, nur das zu ermöglichen, was nötig ist. Wenn Sie ein paar Bohnen verspotten wollen, sollten Sie nicht definieren, dass in einem @SpringBootApplication. Ein regulärer @Configuration, den Sie importieren, ist in Ordnung. Wir haben @MockBean auch automatisch für Sie Mock Dinge.

+0

Ich habe 'MockedTestConfig.class' in reguläre @Configuration geändert und' classes = {MyApplication.class, MockedTestConfig.class} 'in @SpringBootTest hinzugefügt, und alle Tests funktionierten einwandfrei. Sie haben es vorher nicht getan, also habe ich es in @SpringBootApplication geändert. Ich denke, die Reihenfolge in den Klassen war zu dieser Zeit falsch. Vielen Dank. :) – margincall

Verwandte Themen