Testovanie jarnej integrácie bootovania so zabudovaným MongoDB

1. Prehľad

V tomto tutoriále sa naučíme, ako používať integrované riešenie MongoDB od spoločnosti Flapdoodle spolu s Spring Boot na plynulé spustenie testov integrácie MongoDB.

MongoDB je populárna databáza dokumentov NoSQL. Vďaka vysokej škálovateľnosti, zabudovanému zdieľaniu a vynikajúcej podpore komunity sa často považuje za „the NoSQL storage ”od mnohých vývojárov.

Rovnako ako u iných technológií na perzistenciu, Je veľmi dôležité, aby ste mohli ľahko otestovať integráciu databázy so zvyškom našej aplikácie. Vďakabohu nám Spring Boot umožňuje ľahko napísať tento druh testov.

2. Maven závislosti

Najskôr nastavíme rodiča Maven pre náš projekt Boot.

Ďakujem rodičovi nemusíme definovať verziu pre každú závislosť Maven ručne.

Prirodzene budeme používať Spring Boot:

 org.springframework.boot spring-boot-starter-parent 2.3.3.RELEASE 

Najnovšiu verziu systému Boot nájdete tu.

Keďže sme pridali rodiča Spring Boot, môžeme pridať požadované závislosti bez zadania ich verzií:

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

spring-boot-starter-data-mongodb povolí jarnú podporu pre MongoDB:

 de.flapdoodle.embed de.flapdoodle.embed.mongo test 

de.flapdoodle.embed.mongo poskytuje zabudované MongoDB pre integračné testy.

3. Vyskúšajte pomocou zabudovaného MongoDB

Táto časť obsahuje dva scenáre: test Spring Boot a manuálny test.

3.1. Jarný test topánok

Po pridaní de.flapdoodle.embed.mongo závislosť Spring Boot sa automaticky pokúsi stiahnuť a spustiť vložený MongoDB pri behu testov.

Balík sa stiahne pre každú verziu iba raz, aby následné testy prebehli oveľa rýchlejšie.

V tejto fáze by sme mali byť schopní spustiť a zložiť vzorový test integrácie JUnit 5:

@DataMongoTest @ExtendWith (SpringExtension.class) verejná trieda MongoDbSpringIntegrationTest {@DisplayName ("daný objekt sa má uložiť" + "pri uložení objektu pomocou šablóny MongoDB" + "potom sa objekt uloží") @Test verejný test neplatnosti (@Autowired MongoTemplate mongoTemplate) {// daný DBObject objectToSave = BasicDBObjectBuilder.start () .add ("kľúč", "hodnota") .get (); // keď mongoTemplate.save (objectToSave, "zbierka"); // potom assertThat (mongoTemplate.findAll (DBObject.class, "collection")). extrasing ("key") .containsOnly ("value"); }}

Ako vidíme, vloženú databázu automaticky spustil program Spring, ktorý by sa mal tiež prihlásiť do konzoly:

... od MongodbExampleApplicationTests na Arroyo s PID 10413 ...

3.2. Manuálny test konfigurácie

Spring Boot sa automaticky spustí a nakonfiguruje vloženú databázu a potom ju vykoná MongoTemplate napríklad pre nás. Avšak niekedy možno budeme musieť manuálne nakonfigurovať vloženú databázu Mongo (napr. pri testovaní konkrétnej verzie databázy DB).

Nasledujúci úryvok ukazuje, ako môžeme nakonfigurovať vloženú inštanciu MongoDB ručne. To je zhruba ekvivalent predchádzajúceho jarného testu:

trieda ManualEmbeddedMongoDbIntegrationTest {private static final String CONNECTION_STRING = "mongodb: //% s:% d"; súkromný MongodExecutable mongodExecutable; súkromná MongoTemplate mongoTemplate; @AfterEach void clean () {mongodExecutable.stop (); } @BeforeEach void setup () vyvolá výnimku {String ip = "localhost"; int port = 27017; IMongodConfig mongodConfig = nový MongodConfigBuilder (). Verzia (Version.Main.PRODUCTION) .net (nový Net (ip, port, Network.localhostIsIPv6 ())) .build (); Štartér MongodStarter = MongodStarter.getDefaultInstance (); mongodExecutable = starter.prepare (mongodConfig); mongodExecutable.start (); mongoTemplate = nový MongoTemplate (MongoClients.create (String.format (CONNECTION_STRING, ip, port)), "test"); } @DisplayName ("daný objekt na uloženie" + "pri ukladaní objektu pomocou šablóny MongoDB" + "potom je objekt uložený") @Test void test () vyvolá výnimku {// daný DBObject objectToSave = BasicDBObjectBuilder.start () .add ( "kľúč", "hodnota") .get (); // keď mongoTemplate.save (objectToSave, "collection"); // potom assertThat (mongoTemplate.findAll (DBObject.class, "collection")). extrasing ("key") .containsOnly ("value"); }}

Upozorňujeme, že ich môžeme rýchlo vytvoriť MongoTemplate bean nakonfigurovaný tak, aby používal našu ručne nakonfigurovanú vloženú databázu a registroval ju vo vnútri kontajnera Spring iba tak, že vytvoril napríklad a @ TestConfiguration s @Bean metóda, ktorá sa vráti nový MongoTemplate (MongoClients.create (connectionString, „test“)).

Viac príkladov nájdete v oficiálnom úložisku GitHub od spoločnosti Flapdoodle.

3.3. Protokolovanie

Môžeme nakonfigurovať protokolovacie správy pre MongoDB pri spustení integračných testov pridaním týchto dvoch vlastností do src / test / resources / application.propertes spis:

logging.level.org.springframework.boot.autoconfigure.mongo.inštalovaný logging.level.org.mongodb

Napríklad na deaktiváciu protokolovania jednoducho nastavíme hodnoty na vypnutý:

logging.level.org.springframework.boot.autoconfigure.mongo.embedded = vypnuté logging.level.org.mongodb = vypnuté

3.4. Využitie skutočnej databázy výroby

Keďže sme pridali de.flapdoodle.embed.mongo závislosť pomocou testpri spustení v produkcii nie je potrebné zakazovať vloženú databázu. Všetko, čo musíme urobiť, je zadať podrobnosti o pripojení MongoDB (napr. Hostiteľ a port) a môžeme vyraziť.

Na použitie vloženej databázy mimo testov môžeme použiť jarné profily, ktoré zaregistrujú správne MongoClient (vložený alebo produkčný) v závislosti od aktívneho profilu.

Budeme tiež musieť zmeniť rozsah výrobnej závislosti na beh programu.

4. Diskusia o integrovanom testovaní

Používanie vloženej databázy by na začiatku mohlo vyzerať ako skvelý nápad. Je to skutočne dobrý prístup, keď chceme vyskúšať, či sa naša aplikácia chová správne v oblastiach, ako napríklad:

  • Konfigurácia mapovania ObjectDocument
  • Poslucháči udalostí životného cyklu prispôsobeného na pretrvávanie (pozri AbstractMongoEventListener)
  • Logika ľubovoľného kódu pracujúceho priamo s vrstvou vytrvalosti

Bohužiaľ použitie zabudovaného servera nemožno považovať za „úplné testovanie integrácie“. Flapdoodle zabudovaný MongoDB nie je oficiálnym produktom MongoDB. Preto si nemôžeme byť istí, že sa správa presne ako v produkčnom prostredí.

Ak chceme spustiť komunikačné testy v prostredí čo najbližšie k produkcii, lepším riešením je použiť kontajner prostredia, ako je Docker.

Ak sa chcete dozvedieť viac informácií o Docker, prečítajte si náš predchádzajúci článok tu.

5. Záver

Spring Boot veľmi uľahčuje vykonávanie testov, ktoré overujú správne mapovanie dokumentov a integráciu databázy. Pridaním správnej závislosti Maven sme okamžite schopní používať komponenty MongoDB v integračných testoch Spring Boot.

Musíme si to pamätať zabudovaný server MongoDB nemožno považovať za náhradu „skutočného“ servera.

Celý zdrojový kód všetkých príkladov je k dispozícii na GitHub.


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