בדיקת אינטגרציה עם Maven

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

Maven הוא כלי הבנייה הפופולרי ביותר במרחב ג'אווה, בעוד שבדיקת שילוב היא חלק חיוני בתהליך הפיתוח. לָכֵן, זוהי אפשרות טבעית להגדיר ולבצע בדיקות אינטגרציה עם Maven.

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

2. הכנה

כדי להפוך את קוד ההדגמה לקרוב לפרויקט בעולם האמיתי, נקבע יישום JAX-RS. יישום זה נפרס לשרת לפני ביצוע מבחני האינטגרציה ומפורק לאחר מכן.

2.1. תצורת Maven

אנו בונים את יישום ה- REST שלנו סביב ג'רזי - יישום הייחוס של JAX-RS. יישום זה דורש כמה תלות:

 org.glassfish.jersey.containers ג 'רזי-מיכל-servlet-core 2.27 org.glassfish.jersey.inject ג'רזי-hk2 2.27 

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

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

כך אנו מגדירים את התוסף Jetty Maven pom.xml:

 org.eclipse.jetty jetty-maven-plugin 9.4.11.v20180605 8999 צא מ- 9000 start-jetty pre-integration-test start stop-jetty post-integration-test stop 

כאשר שרת המזח יופעל, הוא יקשיב ליציאה 8999. ה stopKey ו stopPort רכיבי התצורה משמשים אך ורק את התוספים תפסיק המטרה והערך שלהם לא חשובים מבחינתנו.

כאן תוכלו למצוא את הגרסה האחרונה של התוסף Jetty Maven.

דבר נוסף שיש לשים לב אליו הוא שעלינו להגדיר את אריזה אלמנט ב pom.xml קובץ ל מִלחָמָהאחרת התוסף Jetty לא יכול להפעיל את השרת:

מִלחָמָה

2.2. יצירת יישום REST

נקודת הסיום של היישום פשוטה מאוד - החזרת הודעת קבלת פנים כאשר בקשת GET פוגעת בשורש ההקשר:

@Path ("/") class public RestEndpoint {@GET public מחרוזת שלום () {return "ברוך הבא לבלדונג!"; }}

כך נרשום את מחלקת נקודות הקצה אצל ג'רזי:

חבילה com.baeldung.maven.it; ייבא org.glassfish.jersey.server.ResourceConfig; class class EndpointConfig מרחיב את ResourceConfig {public EndpointConfig () {register (RestEndpoint.class); }}

כדי ששרת Jetty יהיה מודע ליישום ה- REST שלנו, אנו יכולים להשתמש בקלאסיקה web.xml מתאר פריסה:

  rest-servlet org.glassfish.jersey.servlet.ServletContainer javax.ws.rs.Application com.baeldung.maven.it.EndpointConfig rest-servlet / * 

יש למקם את המתאר הזה בספריה / src / main / webapp/ WEB-INF להיות מוכר על ידי השרת.

2.3. קוד בדיקת צד לקוח

כל שיעורי המבחן בסעיפים הבאים מכילים שיטה אחת:

@ מבחן ציבורי בטל כאשר SendGet_thenMessageIsReturned () זורק IOException {String url = "// localhost: 8999"; חיבור URLConnection = URL חדש (url) .openConnection (); נסה (InputStream תגובה = connection.getInputStream (); סורק סורק = סורק חדש (תגובה)) {String responseBody = scanner.nextLine (); assertEquals ("ברוך הבא לבלדונג!", תגובהBody); }}

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

3. בדיקת אינטגרציה בפעולה

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

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

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

בקטעים הבאים, נגדיר את כל מבחני האינטגרציה עם פרופילי בנייה.

4. בדיקה באמצעות התוסף Failsafe

הדרך הפשוטה ביותר לבצע בדיקות אינטגרציה היא להשתמש ב- Maven אל כשל חיבור.

כברירת מחדל, ה- Maven בטוח תוסף מבצע בדיקות יחידה במהלך מִבְחָן שלב, בעוד ה אל כשל תוסף מריץ בדיקות אינטגרציה ב - Windows מבחן האינטגרציה שלב.

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

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

הביצוע של בטוח תוסף כולל את כל המחלקות ששמם מתחיל ב מִבְחָן, או מסתיים ב מִבְחָן, בדיקות אוֹ TestCase. לעומת זאת, ה אל כשל התוסף מבצע שיטות בדיקה בשיעורים ששמם מתחיל ב זה, או מסתיים ב זה אוֹ ITCase.

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

בואו נוסיף את אל כשל תוסף ל- POM עם תצורת ברירת מחדל:

 failsafe maven-failsafe-plugin 2.22.0 שילוב-בדיקת אמת 

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

עם התצורה לעיל, שיטת הבדיקה הבאה תבוצע ב- מבחן האינטגרציה שלב:

Class class RestIT {// שיטת הבדיקה המוצגת בסעיף קטן 2.3}

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

לאמת mvn -Pfailsafe

אנו יכולים גם להתאים אישית את דפוסי השמות כך שיכללו שיעורים עם שמות שונים:

 תוסף maven-failsafe 2.22.0 ** / * RestIT ** / RestITCase ... 

5. בודקים באמצעות התוסף Surefire

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

נניח שאנחנו רוצים למנות את כל מבחני האינטגרציה עם הסיומת מבחן האינטגרציה. מאז בטוח תוסף מריץ בדיקות עם שם כזה ב- מִבְחָן בשלב כברירת מחדל, עלינו לא לכלול אותם מביצוע ברירת המחדל:

 תוסף maven-surefire-2.22.0 ** / * IntegrationTest 

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

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

 בטוח maven-surefire-plugin 2.22.0 מבחן אינטגרציה מבחן אף ** / * IntegrationTest 

במקום לחייב את מִבְחָן המטרה של בטוח תוסף ל- מִבְחָן שלב הבנייה, כרגיל, קשרנו אותו ל מבחן האינטגרציה שלב. התוסף יתחיל לפעול במהלך תהליך בדיקת האינטגרציה.

שימו לב שעלינו לקבוע לא לכלול אלמנט ל אף אחד כדי לבטל את ההדרה שצוינה בתצורת הבסיס.

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

מחלקה ציבורית RestIntegrationTest {// שיטת הבדיקה המוצגת בסעיף קטן 2.3}

בדיקה זו תפעל עם הפקודה:

mvn אמת -אשמת אש

6. בדיקה באמצעות תוסף המטען

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

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

7. בדיקות עם JUnit's @קטגוריה

דרך נוחה לבצע בדיקות באופן סלקטיבי היא למנף את ה- @קטגוריה ביאור במסגרת JUnit 4. ביאור זה מאפשר לנו לא לכלול בדיקות מסוימות מבדיקות יחידות, ולכלול אותן בבדיקות אינטגרציה.

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

חבילה com.baeldung.maven.it; שילוב ממשק ציבורי {}

לאחר מכן נוכל לקשט שיעור מבחן עם ה- @קטגוריה ביאור ו שילוב מזהה:

@Category (Integration.class) מחלקה ציבורית RestJUnitTest {// שיטת הבדיקה המוצגת בסעיף קטן 2.3}

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

לא כולל קטגוריה מה- מִבְחָן שלב הבנייה הוא פשוט:

 maven-surefire-plugin 2.22.0 com.baeldung.maven.it.Integration 

כולל ה שילוב בקטגוריה מבחן האינטגרציה השלב הוא גם פשוט:

 קטגוריה maven-failsafe-plugin 2.22.0 ** / * com.baeldung.maven.it. בדיקת שילוב שילוב ובדיקה 

כעת אנו יכולים להריץ בדיקות אינטגרציה עם פקודת Maven:

mvn אמת -קטגוריה

8. הוספת מדריך נפרד לבדיקות אינטגרציה

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

אנחנו יכולים להשתמש ב- Maven בנה עוזר תוסף למטרה זו:

 org.codehaus.mojo build-helper-maven-plugin 3.0.0 להוסיף שילוב-מבחן-מקור ליצור-מבחן-מקורות להוסיף-מבחן-מקור src / שילוב-מבחן / java 

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

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

מחלקה ציבורית RestITCase {// שיטת הבדיקה המוצגת בסעיף קטן 2.3}

הגיע הזמן לערוך מבחני שילוב בכיתה זו:

לאמת mvn -Pfailsafe

המאבן אל כשל תוסף יבצע שיטות בכיתת בדיקה זו עקב התצורה שקבענו בסעיף קטן 3.1.

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

 ... להוסיף-שילוב-מבחן-משאב ליצור-מבחן-משאבים להוסיף-מבחן-משאב src / שילוב-מבחן / משאבים 

9. מסקנה

מאמר זה עבר על שימוש ב- Maven כדי להריץ בדיקות אינטגרציה עם שרת Jetty, תוך התמקדות בתצורה של ה- Maven בטוח ו אל כשל תוספים.

קוד המקור המלא של מדריך זה ניתן למצוא באתר GitHub.