בדיקת שילוב אתחול האביב עם MongoDB מוטבע

1. סקירה כללית

במדריך זה נלמד כיצד להשתמש בפתרון ה- MongoDB המוטבע של Flapdoodle יחד עם Spring Boot להפעלת בדיקות שילוב של MongoDB בצורה חלקה.

MongoDB הוא מאגר מסמכים פופולרי NoSQL. הודות למדרגיות הגבוהה, השבבים המובנים והתמיכה הקהילתית המצוינת היא נחשבת לעתים קרובות "ה אחסון NoSQL ”על ידי מפתחים רבים.

כמו בכל טכנולוגיית התמדה אחרת, זה קריטי להיות מסוגל לבדוק שילוב בסיסי נתונים עם שאר היישומים שלנו בקלות. למרבה המזל, Spring Boot מאפשר לנו לכתוב סוג כזה של בדיקות בקלות.

2. תלות Maven

ראשית, בואו נגדיר את ההורה Maven לפרויקט Boot שלנו.

תודה להורה איננו צריכים להגדיר גרסה לכל תלות ב- Maven באופן ידני.

אנו מטבע הדברים נשתמש באביב המגפיים:

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

תוכל למצוא את גרסת האתחול האחרונה כאן.

מכיוון שהוספנו הורה האביב של האביב, אנו יכולים להוסיף תלות נדרשת מבלי לציין את גרסאותיהם:

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

אביב-אתחול-התחלה-נתונים-מונגודב יאפשר תמיכה באביב עבור MongoDB:

 מבחן de.flapdoodle.embed מבחן de.flapdoodle.embed.mongo 

de.flapdoodle.embed.mongo מספק MongoDB מוטבע לבדיקות אינטגרציה.

3. בדוק באמצעות MongoDB מוטבע

סעיף זה מכסה שני תרחישים: מבחן אתחול האביב ומבחן ידני.

3.1. מבחן אתחול האביב

לאחר ההוספה de.flapdoodle.embed.mongo תלות Spring Boot ינסה אוטומטית להוריד ולהפעיל את ה- MongoDB המוטבע כאשר מריצים מבחנים.

החבילה תוריד פעם אחת בלבד לכל גרסה, כך שהבדיקות הבאות יפעלו מהר יותר.

בשלב זה אנו אמורים להיות מסוגלים להתחיל ולעבור את מבחן האינטגרציה של JUnit 5 לדוגמא:

@DataMongoTest @ExtendWith (SpringExtension.class) מחלקה ציבורית MongoDbSpringIntegrationTest {@DisplayName ("האובייקט שניתן לשמור" + "כאשר שמירת האובייקט באמצעות תבנית MongoDB" + "ואז האובייקט נשמר") @ מבחן הריק הציבורי @ @ MongoTemplate MongoTemplate האוויר {// נתון DBObject objectToSave = BasicDBObjectBuilder.start () .add ("מפתח", "ערך") .get (); // כאשר mongoTemplate.save (objectToSave, "אוסף"); // ואז assertThat (mongoTemplate.findAll (DBObject.class, "collection")). חילוץ ("key") .containsOnly ("value"); }}

כפי שאנו רואים, מסד הנתונים המשובץ התחיל באופן אוטומטי על ידי אביב, אשר צריך להירשם גם במסוף:

... מתחיל את MongodbExampleApplicationTests על arroyo עם PID 10413 ...

3.2. מבחן תצורה ידני

Spring Boot יתחיל ותגדיר באופן אוטומטי את מסד הנתונים המשובץ ואז יזריק אותו MongoTemplate למשל בשבילנו. למרות זאת, לפעמים נצטרך להגדיר ידנית את מסד הנתונים המוטבע של Mongo (למשל, בעת בדיקת גרסת DB ספציפית).

הקטע הבא מראה כיצד אנו יכולים להגדיר את המופע המוטבע ב- MongoDB באופן ידני. זה בערך המקביל למבחן האביב הקודם:

class ManualEmbeddedMongoDbIntegrationTest {private static final String CONNECTION_STRING = "mongodb: //% s:% d"; פרטי MongodExecutable mongodExecutable; פרטי MongoTemplate mongoTemplate; @AfterEach ריק ריק () {mongodExecutable.stop (); } @ לפני כל הגדרת חלל () זורקת חריג {String ip = "localhost"; יציאת int = 27017; IMongodConfig mongodConfig = MongodConfigBuilder חדש (). גרסה (Version.Main.PRODUCTION) .net (רשת חדשה (ip, יציאה, Network.localhostIsIPv6 ())) .build (); Starter של MongodStarter = MongodStarter.getDefaultInstance (); mongodExecutable = starter.prepare (mongodConfig); mongodExecutable.start (); mongoTemplate = MongoTemplate חדש (MongoClients.create (String.format (CONNECTION_STRING, ip, port)), "test"); } @DisplayName ("האובייקט הנתון לשמור" + "כאשר שמירת האובייקט באמצעות תבנית MongoDB" + "ואז האובייקט נשמר") @ Test void test () זורק חריג {// נתון DBObject objectToSave = BasicDBObjectBuilder.start (). להוסיף ( "מפתח", "ערך") .get (); // כאשר mongoTemplate.save (objectToSave, "אוסף"); // ואז assertThat (mongoTemplate.findAll (DBObject.class, "collection")). חילוץ ("key") .containsOnly ("value"); }}

שים לב, שנוכל ליצור במהירות MongoTemplate שעועית מוגדרת להשתמש במסד הנתונים המשובץ המוגדר ידנית שלנו ולרשום אותה בתוך מיכל האביב על ידי יצירת, למשל, רק א @TestConfiguration עם @אפונה שיטה שתחזור MongoTemplate חדש (MongoClients.create (connectionString, "test").

דוגמאות נוספות ניתן למצוא במאגר GitHub הרשמי של Flapdoodle.

3.3. רישום

אנו יכולים להגדיר הודעות רישום עבור MongoDB בעת הפעלת בדיקות אינטגרציה על ידי הוספת שני מאפיינים אלה src / test / resources / application.propertes קוֹבֶץ:

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

לדוגמה, כדי להשבית רישום, אנו פשוט מגדירים את הערכים ל- כבוי:

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

3.4. שימוש במסד נתונים אמיתי בייצור

מאז שהוספנו de.flapdoodle.embed.mongo תלות באמצעות מִבְחָןאין צורך להשבית מסד נתונים משובץ בעת הפעלת הייצור. כל שעלינו לעשות הוא לציין את פרטי החיבור של MongoDB (למשל, מארח ויציאה) ואנחנו טובים ללכת.

כדי להשתמש ב- DB מוטבע מחוץ לבדיקות, נוכל להשתמש בפרופילי Spring אשר ירשמו את הזכות MongoClient (מוטבע או ייצור) בהתאם לפרופיל הפעיל.

נצטרך לשנות את היקף תלות הייצור ל זמן ריצה.

4. מחלוקת בדיקה משובצת

שימוש במסד נתונים מוטבע עשוי להיראות כמו רעיון נהדר בהתחלה. ואכן זו גישה טובה כשאנחנו רוצים לבדוק אם היישום שלנו מתנהג נכון בתחומים כמו:

  • תצורת מיפוי ObjectDocument
  • מאזינים לאירועי מחזור החיים בהתמדה בהתאמה אישית (עיין ב תקציר MongoEventListener)
  • ההיגיון של כל קוד שעובד ישירות עם שכבת ההתמדה

לצערי, שימוש בשרת מוטבע אינו יכול להיחשב כ"בדיקת שילוב מלאה ". ה- MongoDB המשובץ של Flapdoodle אינו מוצר רשמי של MongoDB. לכן, אנחנו לא יכולים להיות בטוחים שהוא מתנהג בדיוק כמו בסביבת הייצור.

אם ברצוננו לבצע בדיקות תקשורת בסביבה כמה שיותר קרוב לייצור, פיתרון טוב יותר הוא להשתמש במיכל סביבה כמו Docker.

למידע נוסף על Docker קרא את המאמר הקודם שלנו כאן.

5. מסקנה

Spring Boot הופך את זה לפשוט ביותר להפעלת בדיקות המאמתות מיפוי מסמכים תקין ושילוב בסיסי נתונים. על ידי הוספת התלות הנכונה של Maven, אנו יכולים מיד להשתמש ברכיבי MongoDB במבחני אינטגרציה של Spring Boot.

עלינו לזכור זאת שרת MongoDB מוטבע אינו יכול להיחשב כתחליף לשרת "אמיתי".

קוד המקור המלא של כל הדוגמאות זמין באתר GitHub.


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