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.


$config[zx-auto] not found$config[zx-overlay] not found