WebAppConfiguration a tavaszi tesztekben
1. Áttekintés
Ebben a cikkben a @WebAppConfiguration tavaszi kommentár, miért van szükségünk rá integrációs tesztjeink során, és hogyan konfigurálhatjuk úgy, hogy ezek a tesztek valóban WebApplicationContext.
2. @WebAppConfiguration
Egyszerűen fogalmazva, ez egy osztályszintű feljegyzés, amelyet az alkalmazási környezet webes verziójának létrehozásához használnak a Spring Framework-ben.
Arra használják, hogy jelezzék ApplicationContext amely a teszt számára bootstrapped, annak egy példányának kell lennie WebApplicationContext.
Rövid megjegyzés a használatról - ezt a kommentárt általában az integrációs tesztekben találjuk meg, mert a WebApplicationContext építésére használják a MockMvc tárgy. További információt a Spring integrációs teszteléséről itt talál.
3. Betöltés a WebApplicationContext
A 3.2 tavasztól kezdve támogatást kap a WebApplicationContext integrációs tesztekben:
@WebAppConfiguration @ContextConfiguration (class = WebConfig.class) public class EmployeeControllerTest {...}
Ez utasítja a TestContext keretrendszer, amely a WebApplicationContext terhelni kell a teszthez.
És a háttérben a MockServletContext létrejön és a tesztjeinkhez eljuttatjuk WebApplicationContext valami által TestContext keretrendszer.
3.1. Konfigurációs beállítások
Alapértelmezés szerint a WebApplicationContext értékre lesz állítva „File: src / main / webapp”, amely a WAR gyökérzetének alapértelmezett helye egy Maven Projektben.
Ezt azonban felülírhatjuk azzal, hogy egyszerűen alternatív utat adunk a @WebAppConfiguration kommentár:
@WebAppConfiguration ("src / test / webapp")
A fájlrendszer helyett hivatkozhatunk egy alap erőforrás elérési útjára is az osztályútvonalról:
@WebAppConfiguration ("classpath: test-web-resources")
3.2. Gyorsítótár
Egyszer a WebApplicationContext betöltődik, a rendszer gyorsítótárba kerül, és újból felhasználja az összes következő tesztet, amely ugyanazon egyedi környezetkonfigurációt deklarálja ugyanazon tesztcsomagon belül.
A gyorsítótárral kapcsolatos további részletekért tekintse meg a referencia kézikönyv Kontextus gyorsítótárazás szakaszát.
4. Használata @WebAppConfiguration a tesztekben
Most, hogy megértettük, miért kell hozzáadnunk a @WebAppConfiguration jelölés tesztosztályainkon, nézzük meg mi történik, ha elmulasztjuk hozzáadni amikor a WebApplicationContext.
@RunWith (SpringJUnit4ClassRunner.class) // @ @WebAppConfiguration szándékosan kihagyva @ContextConfiguration (class = WebConfig.class) public class EmployeeTest {@Autowired private WebApplicationContext webAppContext; privát MockMvc mockMvc; @A nyilvános void beállítása előtt () {MockitoAnnotations.initMocks (this); mockMvc = MockMvcBuilders.webAppContextSetup (webAppContext) .build (); } ...}
Figyeljük meg, hogy kommentáltuk az annotációt, hogy szimuláljuk azt a forgatókönyvet, amelyben elfelejtjük hozzáadni. Itt könnyen belátható, hogy miért nem sikerül a teszt a JUnit teszt futtatásakor: megpróbáljuk automatikusan bekötni a WebApplicationContext egy osztályban, ahol még nem állítottunk be egyet.
Tipikusabb példa azonban egy teszt, amely webalapú Spring konfigurációt használ; ez valójában elég a teszt szünetéhez.
Nézzük meg:
@RunWith (SpringJUnit4ClassRunner.class) // @ @WebAppConfiguration szándékosan kihagyva @ContextConfiguration (class = WebConfig.class) public class EmployeeTestWithoutMockMvc {@Autowired private EmployeeController workerController; ...}
Annak ellenére, hogy a fenti példa nem automatikus a WebApplicationContext még mindig kudarcot vall, mert megpróbál webes konfigurációt használni - WebConfig:
@Configuration @EnableWebMvc @ComponentScan ("com.baeldung.web") nyilvános osztály WebConfig valósítja meg a WebMvcConfigurer {...}
Az annotáció @EnableWebMvc itt a tettes - amihez alapvetően egy webalapú tavaszi kontextusra lesz szükség, enélkül pedig a teszt kudarcát látjuk:
Okozta: org.springframework.beans.factory.NoSuchBeanDefinitionException: Nem található [javax.servlet.ServletContext] típusú minősítő bab a függőséghez: várhatóan legalább 1 bab, amely jogosultnak minősül ennek a függőségnek. Függőségi megjegyzések: {@ org.springframework.beans.factory.annotation.Autowired (kötelező = igaz)} itt: osbfsDefaultListableBeanFactory .raiseNoSuchBeanDefinitionException (DefaultListableBeanFactory.java:1373) at osbfsDefault. resolDependency (DefaultListableBeanFactory.java:1014) at osbfaAutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement .inject (AutowiredAnnotationBeanPostProcessor.java:545) ... 43 tovább
Tehát ez a probléma, amelyet könnyen megoldunk a @WebAppConfiguration tesztjeink jegyzete.
5. Következtetés
Ebben a cikkben megmutattuk, hogyan engedhetjük meg a TestContext keretet betölteni a WebApplicationContext integrációs tesztjeinkbe, csak az annotáció hozzáadásával.
Végül megvizsgáltuk azokat a példákat, amelyek ellenére, ha hozzáadjuk aContextConfiguration a teszthez ez csak akkor működhet, ha hozzáadjuk a @WebAppConfiguration annotáció.
Az ebben a cikkben szereplő példák megvalósítása elérhető a GitHub tárházunkban.