Ich arbeite an einer Spring-fähigen Embedded Tomcat-Anwendung mit Annotation-basierter Konfiguration. Die Anwendung verwendet Spring MVC Controller für ihre REST-Endpunkte. Zur Trennung von Problemen und zur Vermeidung doppelter Beans in separaten Kontexten enthält der übergeordnete Kontext alle Beans, die keine REST-Endpunkte sind, und der Spring Web MVC-Kontext enthält alle Beans, bei denen es sich um REST-Endpunkte handelt.Wie wird die Federhierarchie bei Unit/Integration-Tests verwaltet?
Ich möchte neue Integrationstests für diese Endpunkte schreiben und umgestalten, die für die Struktur der App repräsentativ sind. Es gibt bestehende Testklassen wie folgt:
import com.stuff.web.MyEndpoint;
@Configuration
@ComponentScan(basePackages = {"com.stuff"})
public class SpringConfig { ... }
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {SpringConfig.class})
public class TestMyEndpoint {
@Autowired
private MyEndpoint myEndpoint;
private MockMvc mockMvc;
@Before
public void setUp() {
mockMvc = MockMvcBuilders
.standaloneSetup(myEndpoint)
.build();
}
@Test
public void testMyEndpoint() throws Exception {
mockMvc.perform(get("/myendpoint")
.accept(MediaType.APPLICATION_JSON_VALUE))
.andExpect(status().isOk())
.andReturn();
}
}
Das Problem ist, dass der Kontext, dass ich für diesen Test bin jetzt mit jeder Bohne hat geladen, während ich möchte sicherstellen, dass es keine nicht-REST Bohnen geladen, dass während der Ausführung der Tests in RestController-Beans aufrufen.
Hinzufügen von so etwas wie
@Configuration
@ComponentScan(basePackages = {"com.stuff"},
excludeFilters = {
@Filter(type = FilterType.REGEX, pattern = "com.stuff.web.*")})
public class SpringConfig { ... }
Würde die Art der Trennung sicherzustellen, dass ich für gehe, aber dann habe ich keinen Zugriff auf die com.stuff.web.MyEndpoint Klasse, die ich versuche zu Prüfung.
Fehle ich etwas einfach? Lassen Sie es mich wissen, wenn ich die Situation klar erkläre.