Provjera integracije proljetnog pokretanja s ugrađenim MongoDB-om

1. Pregled

U ovom uputstvu naučit ćemo kako koristiti ugrađeno rješenje MongoDB tvrtke Flapdoodle zajedno s Spring Bootom za nesmetano pokretanje MongoDB integracijskih testova.

MongoDB je popularna baza podataka NoSQL dokumenata. Zahvaljujući visokoj skalabilnosti, ugrađenom oštrenju i izvrsnoj podršci zajednice često se smatra „the NoSQL storage ”mnogih programera.

Kao i kod bilo koje druge tehnologije postojanosti, presudno je da možete lako testirati integraciju baze podataka s ostatkom naše aplikacije. Srećom, Spring Boot nam omogućuje da lako napišemo takve testove.

2. Ovisnosti Mavena

Prvo, postavimo roditelja Maven za naš projekt Boot.

Hvala roditelju ne trebamo ručno definirati verziju za svaku ovisnost o Mavenu.

Prirodno ćemo koristiti Spring Boot:

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

Najnoviju inačicu pokretanja možete pronaći ovdje.

Budući da smo dodali roditelja Spring Boot, možemo dodati potrebne ovisnosti bez navođenja njihovih verzija:

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

spring-boot-starter-data-mongodb omogućit će proljetnu podršku za MongoDB:

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

de.flapdoodle.embed.mongo pruža ugrađeni MongoDB za integracijske testove.

3. Testirajte pomoću ugrađenog MongoDB-a

Ovaj odjeljak pokriva dva scenarija: test proljetnog pokretanja i ručni test.

3.1. Test proljetnog pokretanja

Nakon dodavanja de.flapdoodle.embed.mongo ovisnost Spring Boot automatski će pokušati preuzeti i pokrenuti ugrađeni MongoDB prilikom izvođenja testova.

Paket će se preuzeti samo jednom za svaku verziju, tako da se sljedeći testovi izvode mnogo brže.

U ovoj fazi trebali bismo moći pokrenuti i proći ogledni test integracije JUnit 5:

@DataMongoTest @ExtendWith (SpringExtension.class) javna klasa MongoDbSpringIntegrationTest {@DisplayName ("dati objekt za spremanje" + "pri spremanju objekta pomoću MongoDB predloška" + "tada je objekt spremljen") @Test test javne praznine (@Autowired MongoTemplate mongoTemplate) {// dano DBObject objectToSave = BasicDBObjectBuilder.start () .add ("key", "value") .get (); // kada mongoTemplate.save (objectToSave, "collection"); // zatim assertThat (mongoTemplate.findAll (DBObject.class, "collection")). extracting ("key") .containsOnly ("value"); }}

Kao što vidimo, ugrađenu bazu podataka automatski je pokrenuo Spring, koja bi se također trebala prijaviti u konzolu:

... Pokretanje MongodbExampleApplicationTests na arroyo s PID 10413 ...

3.2. Test ručne konfiguracije

Spring Boot će automatski pokrenuti i konfigurirati ugrađenu bazu podataka, a zatim ubrizgati MongoTemplate primjer za nas. Međutim, ponekad ćemo možda trebati ručno konfigurirati ugrađenu Mongo bazu podataka (npr. prilikom testiranja određene verzije DB-a).

Sljedeći isječak pokazuje kako možemo ručno konfigurirati ugrađenu instancu MongoDB. Ovo je otprilike ekvivalent prethodnom proljetnom testu:

klasa ManualEmbeddedMongoDbIntegrationTest {privatni statički završni niz CONNECTION_STRING = "mongodb: //% s:% d"; privatno MongodExecutable mongodExecutable; privatni MongoTemplate mongoTemplate; @AfterEach void clean () {mongodExecutable.stop (); } @BeforeEach void setup () baca iznimku {String ip = "localhost"; 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 = novi MongoTemplate (MongoClients.create (String.format (CONNECTION_STRING, ip, port)), "test"); } @DisplayName ("dati objekt za spremanje" + "pri spremanju objekta pomoću MongoDB predloška" + "tada se objekt sprema") @Test void test () baca izuzetak {// daje DBObject objectToSave = BasicDBObjectBuilder.start () .add ( "ključ", "vrijednost") .get (); // kada mongoTemplate.save (objectToSave, "collection"); // zatim assertThat (mongoTemplate.findAll (DBObject.class, "collection")). extracting ("key") .containsOnly ("value"); }}

Imajte na umu da možemo brzo stvoriti MongoTemplate grah konfiguriran da koristi našu ručno konfiguriranu ugrađenu bazu podataka i registrira je unutar spremnika Spring jednostavnim stvaranjem, npr. @TestConfiguration s @Grah metoda koja će se vratiti novi MongoTemplate (MongoClients.create (connectionString, "test").

Još primjera možete pronaći na službenom Flapdoodleovom GitHub repozitorijumu.

3.3. Sječa drva

Možemo konfigurirati evidentiranje poruka za MongoDB prilikom pokretanja integracijskih testova dodavanjem ovih dvaju svojstava u src / test / resources / application.propertes datoteka:

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

Na primjer, da bismo onemogućili evidentiranje, jednostavno postavimo vrijednosti na isključiti:

logging.level.org.springframework.boot.autoconfigure.mongo.embedded = isključeno logging.level.org.mongodb = isključeno

3.4. Korištenje stvarne baze podataka o proizvodnji

Budući da smo dodali de.flapdoodle.embed.mongo ovisnost pomoću testnema potrebe za onemogućavanjem ugrađene baze podataka kada se izvodi u produkciji. Sve što moramo učiniti je odrediti detalje MongoDB veze (npr. Host i port) i spremni smo za početak.

Da bismo koristili ugrađeni DB izvan testova, možemo koristiti Spring profile koji će registrirati pravo MongoClient (ugrađeni ili proizvodni), ovisno o aktivnom profilu.

Također ćemo morati promijeniti opseg proizvodne ovisnosti u vrijeme izvođenja.

4. Kontroverza o ugrađenom testiranju

Korištenje ugrađene baze podataka na početku može izgledati sjajno. Doista je dobar pristup kada želimo testirati ponaša li se naša aplikacija ispravno u područjima kao što su:

  • Konfiguracija mapiranja ObjectDocument
  • Prilagođeni slušatelji događaja trajanja životnog ciklusa (pogledajte AbstractMongoEventListener)
  • Logika bilo kojeg koda koji radi izravno s slojem postojanosti

Nažalost, korištenje ugrađenog poslužitelja ne može se smatrati „cjelovitim testiranjem integracije“. Ugrađeni MongoDB u Flapdoodle nije službeni MongoDB proizvod. Stoga ne možemo biti sigurni da se ponaša točno kao u proizvodnom okruženju.

Ako želimo pokrenuti testove komunikacije u okolini što je bliže moguće proizvodnji, bolje rješenje je korištenje spremnika okoline kao što je Docker.

Da biste saznali više o Dockeru, ovdje pročitajte naš prethodni članak.

5. Zaključak

Spring Boot izuzetno olakšava pokretanje testova koji potvrđuju pravilno mapiranje dokumenata i integraciju baze podataka. Dodavanjem prave ovisnosti o Mavenu, odmah smo u mogućnosti koristiti MongoDB komponente u testovima integracije Spring Boot.

Moramo se toga sjetiti ugrađeni MongoDB poslužitelj ne može se smatrati zamjenom za "pravi" poslužitelj.

Potpuni izvorni kod svih primjera dostupan je na GitHubu.


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