Migrálás a 4. JUnitről az 5. JUnitre
1. Áttekintés
Ebben a cikkben megnézzük, hogyan lehet áttérni a JUnit 4-ről a legújabb JUnit 5 kiadásra - áttekintve a könyvtár két verziója közötti különbségeket.
A JUnit 5 használatára vonatkozó általános irányelveket itt olvashatja el.
2. JUnit 5 előnyei
Kezdjük az előző verzióval - a JUnit 4 rendelkezik néhány egyértelmű korlátozással:
- A teljes keretet egyetlen edénykönyvtár tartalmazta. Az egész könyvtárat akkor is importálni kell, ha csak egy adott szolgáltatásra van szükség. Az 5. JUnit-ben nagyobb részletességet kapunk, és csak a szükségeseket tudjuk importálni
- Egy tesztfutó egyszerre csak a 4. JUnit-ben hajthat végre teszteket (pl. SpringJUnit4ClassRunner vagy Paraméterezett ). A JUnit 5 lehetővé teszi több futó számára, hogy egyszerre dolgozzanak
- A JUnit 4 soha nem lépett túl a Java 7-en, sok funkciót kihagyva a Java 8-ból. A JUnit 5 jól használja a Java 8 szolgáltatásait
A JUnit 5 mögött az az ötlet állt, hogy a JUnit 4-et teljesen átírja, hogy megoldja ezeket a hátrányokat.
3. Különbségek
A 4. JUnit fel lett osztva modulokra, amelyek a JUnit 5-öt tartalmazzák:
- JUnit Platform - ez a modul átfogja az összes kiterjesztés keretrendszert, amely érdekelhet minket a tesztek végrehajtásában, a felfedezésben és a jelentésekben
- JUnit Vintage - ez a modul lehetővé teszi a visszamenőleges kompatibilitást a JUnit 4 vagy akár a JUnit 3 készülékkel
3.1. Megjegyzések
A JUnit 5 fontos változásokkal jár az annotációiban. A legfontosabb az, hogy már nem tudjuk használni @Teszt kommentár az elvárások meghatározásához.
A várt paraméter a 4. JUnit-ben:
A @Test (várható = Exception.class) public void shouldRaiseAnException () dobja a Kivételt {// ...}
Most használhatunk egy módszert assertThrows:
public void shouldRaiseAnException () dobja a Kivételt {Assertions.assertThrows (Exception.class, () -> {// ...}); }
A időtúllépés attribútum a 4. JUnit-ben:
@Test (timeout = 1) public void shouldFailBecauseTimeout () dobja az InterruptedException {Thread.sleep (10); }
Most a assertTimeout módszer az 5. JUnit-ben:
@Test public void shouldFailBecauseTimeout () dobja az InterruptedException {Assertions.assertTimeout (Durill.ofMillis (1), () -> Thread.sleep (10)); }
Egyéb megjegyzések, amelyeket az 5. JUnit egységen belül módosítottak:
- @Előtt az annotációt átnevezik @BeforeEach
- @Utána az annotációt átnevezik @AfterEach
- @Óra előtt az annotációt átnevezik @BeforeAll
- @Óra után az annotációt átnevezik @Végül
- @Figyelmen kívül hagyni az annotációt átnevezik @Tiltva
3.2. Állítások
Most állítási üzeneteket írhatunk egy lambdába az 5. JUnit készülékben, lehetővé téve a lusta értékelés számára, hogy a komplex üzenetek felépítését átugorja, amíg szükséges:
@Test public void shouldFailBecauseTheNumbersAreNotEqual_lazyEvaluation () {Assertions.assertTrue (2 == 3, () -> "Számok" + 2 + "és" + 3 + "nem egyenlőek!"); }
Az állításokat az 5. JUnit-ben is csoportosíthatjuk:
@Test public void shouldAssertAllTheGroup () {List list = Arrays.asList (1, 2, 4); Assertions.assertAll ("A lista nem növekményes", () -> Assertions.assertEquals (list.get (0) .intValue (), 1), () -> Assertions.assertEquals (list.get (1) .intValue ( ), 2), () -> Assertions.assertEquals (list.get (2) .intValue (), 3)); }
3.3. Feltételezések
Az új Feltételezések osztály most van org.junit.jupiter.api.Feltevések. Az 5. JUnit teljes mértékben támogatja a 4. JUnit meglévő feltételezési módszereit, és új metódusokat is hozzáad, hogy egyes állításokat csak meghatározott esetekben futtassanak:
@Test public void whenEnvironmentIsWeb_thenUrlsShouldStartWithHttp () {feltéve, hogy ("WEB" .egyenlő (System.getenv ("ENV")), () -> {assertTrue ("http" .startsWith (cím));}); }
3.4. Címkézés és szűrés
A JUnit 4-ben csoportosíthatjuk a teszteket a @Kategória annotáció. Az 5. JUnit segítségével a @Kategória a kommentár helyébe a @Címke kommentár:
@Tag ("annotations") @Tag ("junit5") @RunWith (JUnitPlatform.class) public class AnnotationTestExampleTest {/*...*/}
A / használatával bizonyos címkéket felvehetünk / kizárhatunk maven-surefire-plugin:
maven-surefire-plugin junit5
3.5. Új kommentárok a futótesztekhez
A @RunWith a tesztkörnyezet más keretrendszerekkel történő integrálására vagy a teljes végrehajtási folyamat megváltoztatására használták a JUnit 4 teszteseteiben.
A JUnit 5 segítségével most már használhatjuk a @ExtendWith jelölés hasonló funkciók biztosítása érdekében.
Például a tavaszi funkciók használatához a JUnit 4-ben:
@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration ({"/app-config.xml", "/test-data-access-config.xml"}) public class SpringExtensionTest {/*...*/}
Az 5. JUnit-ben ez egy egyszerű kiterjesztés:
@ExtendWith (SpringExtension.class) @ContextConfiguration ({"/app-config.xml", "/test-data-access-config.xml"}) public class SpringExtensionTest {/*...*/}
3.6. Új tesztszabályok kommentárjai
A JUnit 4-ben a @Szabály és @ClassRule a jelölésekkel speciális funkcionalitást adtak a tesztekhez.
Az 5. JUnit-ben ugyanazt a logikát reprodukálhatjuk a @ExtendWith annotáció.
Tegyük fel például, hogy van egy egyedi szabályunk a JUnit 4-ben, hogy napló nyomokat írjunk egy teszt előtt és után:
public class A TraceUnitTestRule végrehajtja a TestRule {@Orride public Statement sovelletaan (Nyilatkozati alap, Leírás leírása) {return new Statement () {@Override public void assessment () throws Throwable {// Értékelés nyomon követése előtt és után itt ...}}; }}
És egy tesztcsomagban valósítjuk meg:
@Rule public TraceUnitTestRule traceRuleTests = new TraceUnitTestRule ();
Az 5. JUnit-ben sokkal intuitívabban írhatjuk ugyanezt:
public class TraceUnitExtension implementálja az AfterEachCallback, BeforeEachCallback {@Override public void beforeEach (TestExtensionContext context) dobja a Kivételt {// ...} @Orride public void afterEach (TestExtensionContext context) dobja a Kivételt {// ...}}
A JUnit 5 használata AfterEachCallback és BeforeEachCallback a csomagban elérhető interfészek org.junit.jupiter.api.extension, könnyen alkalmazhatjuk ezt a szabályt a tesztcsomagban:
@RunWith (JUnitPlatform.class) @ExtendWith (TraceUnitExtension.class) public class RuleExampleTest {@Test public void whenTracingTests () {/*...*/}}
3.7. JUnit 5 Vintage
A JUnit Vintage segíti a JUnit tesztek áttelepítését a JUnit 3 vagy JUnit 4 tesztek futtatásával a JUnit 5 kontextusban.
Használhatjuk a JUnit Vintage Engine importálásával:
org.junit.vintage junit-vintage-engine $ {junit5.vintage.version} teszt
4. Következtetés
Amint azt ebben a cikkben láthattuk, a JUnit 5 egy moduláris és modern átvétel a JUnit 4 keretrendszerről. Bevezettük a két változat közötti főbb különbségeket, és utaltunk arra, hogyan lehet migrálni egyikről a másikra.
Az oktatóanyag teljes megvalósítása a GitHub oldalon található.