Tavaszi rendszerindítási tesztelés beágyazott MongoDB-vel

1. Áttekintés

Ebben az oktatóanyagban megtanuljuk, hogyan kell használni a Flapdoodle beágyazott MongoDB megoldását a Spring Boot programmal a MongoDB integrációs tesztek zökkenőmentes futtatásához.

A MongoDB egy népszerű NoSQL dokumentum-adatbázis. A nagy skálázhatóságnak, a beépített szilánkosításnak és a kiváló közösségi támogatásnak köszönhetően gyakran „a NoSQL storage ”sok fejlesztő részéről.

Mint minden más perzisztencia-technológia esetében, kritikus fontosságú, hogy könnyen tesztelhessük az adatbázis-integrációt alkalmazásunk többi részével. Szerencsére a Spring Boot lehetővé teszi számunkra, hogy ilyen teszteket könnyen megírjunk.

2. Maven-függőségek

Először állítsuk be a Maven szülőt a Boot projektünkhöz.

Köszönet a szülőnek nem kell manuálisan meghatároznunk az egyes Maven-függőségek verzióját.

Természetesen a Spring Boot-ot fogjuk használni:

 org.springframework.boot spring-boot-starter-parent 2.3.3.FELHASZNÁLÁS 

A legújabb Boot verziót itt találja.

Mivel hozzáadtuk a Spring Boot szülőt, hozzáadhatjuk a szükséges függőségeket anélkül, hogy megadnánk a verzióikat:

 org.springframework.boot spring-boot-starter-data-mongodb 

tavasz-boot-starter-data-mongodb lehetővé teszi a MongoDB tavaszi támogatását:

 de.flapdoodle.embed de.flapdoodle.embed.mongo teszt 

de.flapdoodle.embed.mongo beágyazott MongoDB-t biztosít az integrációs tesztekhez.

3. Tesztelés a beágyazott MongoDB használatával

Ez a szakasz két forgatókönyvet ölel fel: tavaszi indítási teszt és kézi teszt.

3.1. Tavaszi bakancs teszt

Hozzáadás után de.flapdoodle.embed.mongo függőség A Spring Boot automatikusan megpróbálja letölteni és elindítani a beágyazott MongoDB-t tesztek futtatásakor.

A csomag minden verzióhoz csak egyszer töltődik le, így a későbbi tesztek sokkal gyorsabban futnak.

Ebben a szakaszban képesnek kell lennünk a JUnit 5 mintavételi integrációs teszt elindítására és átadására:

@DataMongoTest @ExtendWith (SpringExtension.class) public class MongoDbSpringIntegrationTest {@DisplayName ("adott objektum mentésre" + ", amikor objektumot ment a MongoDB sablon segítségével" + ", majd az objektum mentésre kerül) @Test public void test (@Autowired MongoTemplate mongo {// adott DBObject objectToSave = BasicDBObjectBuilder.start () .add ("kulcs", "érték") .get (); // amikor mongoTemplate.save (objectToSave, "gyűjtemény"); // majd assertThat (mongoTemplate.findAll (DBObject.class, "gyűjtemény")). extracting ("kulcs") .containsOnly ("érték"); }}

Mint láthatjuk, Spring automatikusan elindította a beágyazott adatbázist, amelyet szintén be kell jelentkezni a konzolba:

... A MongodbExampleApplicationTests indítása az arroyo-n PID 10413-mal ...

3.2. Manuális konfigurációs teszt

A Spring Boot automatikusan elindítja és konfigurálja a beágyazott adatbázist, majd beadja az injekciót MongoTemplate például számunkra. Azonban, néha előfordulhat, hogy manuálisan kell konfigurálnunk a beágyazott mongo adatbázist (például egy adott DB verzió tesztelésekor).

A következő részlet azt mutatja be, hogy miként konfigurálhatjuk manuálisan a beágyazott MongoDB példányt. Nagyjából ez felel meg az előző tavaszi tesztnek:

class ManualEmbeddedMongoDbIntegrationTest {private static final String CONNECTION_STRING = "mongodb: //% s:% d"; privát MongodExecutable mongodExecutable; privát MongoTemplate mongoTemplate; @AfterEach void clean () {mongodExecutable.stop (); } @BeforeEach void setup () dobja a {String ip = "localhost" kivételt; int port = 27017; IMongodConfig mongodConfig = new MongodConfigBuilder (). Version (Version.Main.PRODUCTION) .net (new Net (ip, port, Network.localhostIsIPv6 ())) .build (); MongodStarter starter = MongodStarter.getDefaultInstance (); mongodExecutable = starter.prepare (mongodConfig); mongodExecutable.start (); mongoTemplate = new MongoTemplate (MongoClients.create (String.format (CONNECTION_STRING, ip, port)), "teszt"); } @DisplayName ("adott objektum a mentéshez" + ", amikor objektumot ment a MongoDB" + "sablon használatával, majd az objektum mentésre kerül") "kulcs", "érték") .get (); // amikor mongoTemplate.save (objectToSave, "gyűjtemény"); // majd assertThat (mongoTemplate.findAll (DBObject.class, "gyűjtemény")). extracting ("kulcs") .containsOnly ("érték"); }}

Ne feledje, hogy gyorsan létrehozhatunk MongoTemplate bab konfigurálva, hogy használja a manuálisan konfigurált beágyazott adatbázisunkat, és regisztrálja azt a Spring konténerbe, csupán létrehozva egy @TestConfiguration val vel @Bab módszer, amely visszatér új MongoTemplate (MongoClients.create (connectionString, „teszt”).

További példák találhatók a hivatalos Flapdoodle GitHub adattárában.

3.3. Fakitermelés

Beállíthatjuk a MongoDB naplózási üzeneteit integrációs tesztek futtatásakor, ehhez hozzáadva ezt a két tulajdonságot src / test / resources / application.propertes fájl:

logging.level.org.springframework.boot.autoconfigure.mongo.embedded logging.level.org.mongodb

Például a naplózás letiltásához egyszerűen az értékeket állítjuk be ki:

logging.level.org.springframework.boot.autoconfigure.mongo.embedded = ki logging.level.org.mongodb = ki

3.4. Valódi adatbázis használata a gyártáshoz

Mivel hozzátettük de.flapdoodle.embed.mongo függőség használata tesztnem kell letiltani a beágyazott adatbázist, amikor a termelésen fut. Csak annyit kell tennünk, hogy megadjuk a MongoDB kapcsolat részleteit (pl. Gazdagép és port), és máris mehetünk.

A beágyazott DB teszteken kívüli használatához használhatunk Spring profilokat, amelyek regisztrálják a jogot MongoClient (beágyazott vagy gyártási) az aktív profiltól függően.

Meg kell változtatnunk a gyártási függőség hatókörét is futási idő.

4. Beágyazott tesztelési vita

A beágyazott adatbázis használata az elején nagyszerű ötletnek tűnhet. Valóban jó megközelítés, ha azt akarjuk tesztelni, hogy alkalmazásunk megfelelően viselkedik-e az alábbi területeken:

  • ObjectDocument leképezés konfigurációja
  • Egyéni állandó életciklus-esemény hallgatók (lásd: AbstractMongoEventListener)
  • Minden olyan kód logikája, amely közvetlenül működik a perzisztencia réteggel

Sajnálatos módon, beágyazott szerver használata nem tekinthető „teljes integrációs tesztnek”. A Flapdoodle beágyazott MongoDB nem hivatalos MongoDB termék. Ezért nem lehetünk biztosak abban, hogy pontosan úgy viselkedik, mint a termelési környezetben.

Ha kommunikációs teszteket akarunk futtatni a környezetben a lehető legközelebb a gyártáshoz, jobb megoldás egy olyan környezeti tároló használata, mint például a Docker.

Ha többet szeretne megtudni a Dockerről, olvassa el itt korábbi cikkünket.

5. Következtetés

A Spring Boot rendkívül egyszerűvé teszi a megfelelő dokumentum-feltérképezést és adatbázis-integrációt ellenőrző tesztek futtatását. A megfelelő Maven-függőség hozzáadásával azonnal használhatjuk a MongoDB összetevőket a Spring Boot integrációs tesztekben.

Erre emlékeznünk kell a beágyazott MongoDB szerver nem tekinthető egy „igazi” szerver helyettesítésére.

Az összes példa teljes forráskódja elérhető a GitHub oldalon.