A System.out.println () egység tesztelése a JUnit segítségével
1. Áttekintés
Az egység tesztelésekor alkalmanként érdemes tesztelni azokat az üzeneteket, amelyeken keresztül szabványos kimenetre írunk System.out.println ().
Bár általában a naplózási keretrendszert részesítjük előnyben a standard kimenettel való közvetlen interakció helyett, néha ez nem lehetséges.
Ebben a gyors bemutatóban megnézünk néhány módszert, amelyekkel tesztelhetjük az egységet System.out.println () a JUnit használatával.
2. Egyszerű nyomtatási módszer
Ebben az oktatóanyagban tesztjeink középpontjában egy egyszerű módszer áll, amely a standard kimeneti adatfolyamba ír:
private void print (String output) {System.out.println (output); }
Gyors emlékeztető arra, hogy a ki változó a nyilvános statikus végleges PrintStream objektum, amely a rendszer kimenetére szánt szabványos kimeneti adatfolyamot jelenti.
3. Munka a Core Java-val
Most nézzük meg, hogyan írhatunk egység tesztet annak ellenőrzésére, hogy mit küldünk a println módszer. Mielőtt azonban megírnánk a tényleges egységtesztet, meg kell adnunk néhány inicializálást a tesztünkben:
privát végleges PrintStream standardOut = System.out; privát végső ByteArrayOutputStream outputStreamCaptor = új ByteArrayOutputStream (); @BeforeEach public void setUp () {System.setOut (új PrintStream (outputStreamCaptor)); }
Ban,-ben beállít módszerrel a normál kimeneti adatfolyamot hozzárendeljük egy újhoz PrintStream val,-vel ByteArrayOutputStream. Amint látni fogjuk, ez a kimeneti adatfolyam lesz az, ahol az értékeket most kinyomtatják:
@Test void givenSystemOutRedirection_whenInvokePrintln_thenOutputCaptorSuccess () {print ("Helló Baeldung olvasók !!"); Assert.assertEquals ("Helló Baeldung olvasók !!", outputStreamCaptor.toString () .trim ()); }
Miután felhívtuk a nyomtatás metódust a választott szöveggel, akkor ellenőrizhetjük, hogy a outputStreamCaptor azt a tartalmat tartalmazza, amelyre számítottunk. Hívjuk a trim módszer az új sor eltávolítására System.out.println () - teszi hozzá.
Mivel a standard kimeneti adatfolyam egy megosztott statikus erőforrás, amelyet a rendszer más részei használnak, gondoskodnunk kell az eredeti állapotának helyreállításáról, amikor a tesztünk befejeződik:
@AfterEach public void tearDown () {System.setOut (standardOut); }
Ez biztosítja, hogy a későbbiekben más tesztek során ne kapjunk semmilyen nem kívánt mellékhatást.
4. A Rendszerszabályok használata
Ebben a részben, megnézünk egy rendes külső könyvtárat, a System Rules nevet, amely JUnit-szabályokat tartalmaz a kód teszteléséhez, amely a Rendszer osztály.
Kezdjük azzal, hogy hozzáadjuk a függőséget a sajátunkhoz pom.xml:
com.github.stefanbirkner system-rules 1.19.0 teszt
Most folytathatjuk és tesztet írhatunk a SystemOutRule a könyvtár biztosítja:
@Rule public final SystemOutRule systemOutRule = new SystemOutRule (). EnableLog (); @Test public void givenSystemOutRule_whenInvokePrintln_thenLogSuccess () {print ("Hello Baeldung Readers !!"); Assert.assertEquals ("Helló Baeldung olvasók !!", systemOutRule.getLog () .trim ()); }
Elég jó! Használni a SystemOutRule, lehallgathatjuk az írásokat System.out. Először elkezdünk naplózni mindent, amire írtunk System.out felhívásával a enableLog módszer a szabályunkon. Akkor egyszerűen hívunk getLog hogy a szöveget írják System.out mióta hívtunk enableLog.
Ez a szabály egy praktikus metódust is tartalmaz, amely egy olyan naplót ad vissza, amelynek mindig a vonalválasztója van \ n
Assert.assertEquals ("Helló Baeldung olvasók !! \ n", systemOutRule.getLogWithNormalizedLineSeparator ());
5. Rendszerszabályok használata a JUnit5 és a Lambdas használatával
A JUnit5-ben a szabálymodellt kiterjesztések helyettesítették. Szerencsére az utolsó szakaszban bemutatott System Rules könyvtár tartalmaz egy variációt, amely a JUnit5 használatához készült.
A System Lambda elérhető a Maven Central-tól. Tehát folytathatjuk és hozzáadhatjuk a sajátunkhoz pom.xml:
com.github.stefanbirkner system-lambda 1.0.0 teszt
Most végezzük el tesztünket a könyvtár ezen verziójával:
@Test void givenTapSystemOut_whenInvokePrintln_thenOutputIsReturnedSuccessfully () dobja a Kivételt {String text = tapSystemOut (() -> {print ("Hello Baeldung Readers !!");}); Assert.assertEquals ("Helló Baeldung olvasók !!", text.trim ()); }
Ebben a verzióban felhasználjuk a érintse meg aSystemOut elemet metódus, amely végrehajtja az utasítást, és lehetővé teszi a továbbított tartalom rögzítését System.out.
6. Következtetés
Ebben az oktatóanyagban megismerkedtünk a tesztelés néhány megközelítésével System.out.println. Első megközelítésben azt láttuk, hogyan lehet a Java kimenet segítségével átirányítani a szabványos kimeneti adatfolyamot oda, ahova írjuk.
Aztán láttuk, hogyan kell használni egy ígéretes, a System Rules nevű külső könyvtárat, először a JUnit 4 stílusszabályok felhasználásával, majd később a lambdasszal való együttműködéssel.
Mint mindig, a cikk teljes forráskódja elérhető a GitHubon.