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.