מבוא ל- JUnitParams

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

במאמר זה נחקור את JUnitParams הספרייה ושימושיה. במילים פשוטות, ספריה זו מספקת פרמטמטרציה קלה של שיטות בדיקה ב- JUnit מבחנים.

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

2. תלות של Maven

להשתמש JUnitParams בפרויקט שלנו, אנחנו צריכים להוסיף אותו ל pom.xml:

 pl.pragmatists JUnitParams 1.1.0 

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

3. תרחיש מבחן

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

class class SafeAdditionUtil {public int safeAdd (int a, int b) {long result = ((long) a) + b; אם (תוצאה> Integer.MAX_VALUE) {return Integer.MAX_VALUE; } אחר אם (תוצאה <Integer.MIN_VALUE) {return Integer.MIN_VALUE; } להחזיר (int) תוצאה; }}

4. בניית שיטת בדיקה פשוטה

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

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

@RunWith (JUnitParamsRunner.class) מעמד ציבורי SafeAdditionUtilTest {פרטי SafeAdditionUtil serviceUnderTest = SafeAdditionUtil חדש (); @Test @Parameters ({"1, 2, 3", "-10, 30, 20", "15, -5, 10", "-5, -10, -15"}) פומבי בטל כאשר WithAnnotationProvidedParams_thenSafeAdd (int a , int b, int expectedValue) {assertEquals (expectValue, serviceUnderTest.safeAdd (a, b)); }}

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

הדבר הראשון שאנו מבחינים בו הוא ישרץ מבחן אחר בהערת הכיתה - JUnitParamsRunner.

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

אם נבצע את הבדיקה באמצעות Maven, נראה זאת אנו מנהלים ארבעה מקרי מבחן ואף לא אחד. הפלט יהיה דומה לזה:

-------------------------------------------------- ----- בדיקות -------------------------------------------- ----------- הפעלת com.baeldung.junitparams.SafeAdditionUtilTest הפעלת בדיקות: 4, כישלונות: 0, שגיאות: 0, דילוג על: 0, זמן שחלף: 0.068 שניות - ב- com.baeldung.junitparams.SafeAdditionUtilTest תוצאות: ריצת מבחנים: 4, כישלונות: 0, שגיאות: 0, דילוג: 0

5. סוגים שונים של פרמטריזציה של שיטות בדיקה

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

  • ישירות ב @פרמטרים ביאור (נעשה שימוש בדוגמה לעיל)
  • באמצעות שיטת בדיקה בשם שהוגדרה בתוך ההערה
  • באמצעות שיטה הממופה לפי שם שיטת הבדיקה
  • מחלקת מבחן בשם שהוגדרה בתוך ההערה
  • באמצעות קובץ CSV

בואו נחקור את הגישות אחת אחת.

5.1. ישירות ב @פרמטרים ביאור

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

לדוגמא, המערך יהיה בצורה של { “1, 2, 3”, “-10, 30, 20”} וקבוצת פרמטרים אחת מיוצגת כ- “1, 2, 3”.

המגבלה של גישה זו היא שאנחנו יכולים לספק רק פרימיטיבים ו חוּטs כפרמטרים לבדיקה. לא ניתן להגיש אובייקטים גם כפרמטרים של שיטת בדיקה.

5.2. שיטת פרמטר

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

@Test @Parameters (method = "parametersToTestAdd") פומבי בטל כאשרWithNamedMethod_thenSafeAdd (int a, int b, int expectedValue) {assertEquals (expectValue, serviceUnderTest.safeAdd (a, b)); } אובייקט פרטי [] parametersToTestAdd () {החזר אובייקט חדש [] {אובייקט חדש [] {1, 2, 3}, אובייקט חדש [] {-10, 30, 20}, אובייקט חדש [] {Integer.MAX_VALUE, 2 , Integer.MAX_VALUE}, אובייקט חדש [] {Integer.MIN_VALUE, -8, Integer.MIN_VALUE}}; }

הערת שיטת הבדיקה הנוגעת לשיטה parametersToAdd (), והיא מביאה את הפרמטרים על ידי הפעלת השיטה המפנית אליה.

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

java.lang.RuntimeException: לא ניתן למצוא את השיטה: bogusMethodName ולכן לא נעשה שימוש בפארמים.

5.3. שיטה ממופה לפי שם שיטת הבדיקה

אם לא נציין שום דבר ב- @פרמטרים ביאור, JUnitParams מנסה לטעון שיטת ספק נתוני בדיקה על בסיס שם שיטת הבדיקה. שם השיטה בנוי כ- "ParametersFor" +:

@Test @ Parameters ציבורי בטל כאשרWithnoParam_thenLoadByNameSafeAdd (int a, int b, int expectedValue) {assertEquals (expectedValue, serviceUnderTest.safeAdd (a, b)); } פרמטרים אובייקט [] פרמטרים ForWhenWithnoParam_thenLoadByNameSafe () {להחזיר אובייקט חדש [] {אובייקט חדש [] {1, 2, 3}, אובייקט חדש [] {-10, 30, 20}, אובייקט חדש [] {Integer.MAX_VALUE, 2 , Integer.MAX_VALUE}, אובייקט חדש [] {Integer.MIN_VALUE, -8, Integer.MIN_VALUE}}; }

בדוגמה שלעיל שם שיטת הבדיקה הוא whenWithnoParam_shouldLoadByNameAbdSafeAdd ().

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

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

5.4. כיתת מבחן בשם מוגדרת בתוך ההערה

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

@Test @Parameters (source = TestDataProvider.class) בטל בציבור כאשרWithNamedClass_thenSafeAdd (int a, int b, int expectedValue) {assertEquals (expectValue, serviceUnderTest.safeAdd (a, b)); } מחלקה ציבורית TestDataProvider {אובייקט סטטי ציבורי [] supplyBasicData () {להחזיר אובייקט חדש [] {אובייקט חדש [] {1, 2, 3}, אובייקט חדש [] {-10, 30, 20}, אובייקט חדש [] { 15, -5, 10}, אובייקט חדש [] {-5, -10, -15}}; } אובייקט סטטי ציבורי [] provideEdgeCaseData () {להחזיר אובייקט חדש [] {אובייקט חדש [] {Integer.MAX_VALUE, 2, Integer.MAX_VALUE}, אובייקט חדש [] {Integer.MIN_VALUE, -2, Integer.MIN_VALUE},} ; }}

אנו יכולים לקבל כל מספר של ספקי נתוני בדיקה בכיתה בהתחשב בכך ששם השיטה מתחיל ב"ספק ". אם כן, המנהל בוחר שיטות אלה ומחזיר את הנתונים.

אם אין שיטות כיתה העומדות בדרישה זו, למרות ששיטות אלה מחזירות מערך של לְהִתְנַגֵדs, מתעלמים משיטות אלה.

5.5. באמצעות קובץ CSV

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

בואו נגיד שיש לנו קובץ CSV עם פרמטרי בדיקה כ JunitParamsTestParameters.csv:

1,2,3 -10, 30, 20 15, -5, 10 -5, -10, -15

עכשיו בואו נראה איך ניתן להשתמש בקובץ זה לטעינת פרמטרי בדיקה בשיטת הבדיקה:

@Test @FileParameters ("src / test / resources / JunitParamsTestParameters.csv") חלל ציבורי כאשר WithCsvFile_thenSafeAdd (int a, int b, int expectedValue) {assertEquals (expectedValue, serviceUnderTest.safeAdd (a, b)); }

מגבלה אחת בגישה זו היא שאי אפשר להעביר עצמים מורכבים. רק פרימיטיבים ו חוּטs תקפים.

6. מסקנה

במדריך זה בדקנו כיצד נוכל להשתמש בפונקציות של JUnitParams בְּקִצוּר נִמרָץ.

כמו כן סקרנו גישות שונות שהספרייה מספקת לנו לספק פרמטרי בדיקה לשיטות הבדיקה שלנו - הרבה מעבר למה ש- JUnit עצמה יכולה לעשות.

כמו תמיד, ניתן למצוא את קוד המקור ב- GitHub.


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