מבוא לאסרט ג'יי

מאמר זה הוא חלק מסדרה: • מבוא ל- AssertJ (מאמר נוכחי) • AssertJ עבור גויאבה

• תכונות Java 8 של AssertJ

• קביעות מותאמות אישית עם AssertJ

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

במאמר זה נחקור את AssertJ - ספרייה המופעלת על ידי קהילה פתוחה המשמשת לכתיבת קביעות שוטפות ועשירות במבחני Java.

מאמר זה מתמקד בכלים הזמינים במודול הבסיסי של AssertJ הנקרא AssertJ-core.

2. תלות Maven

על מנת להשתמש ב- AssertJ, עליך לכלול את הסעיף הבא ב- pom.xml קוֹבֶץ:

 מבחן org.assertj assertj-core 3.4.1 

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

שים לב שעבור Java 7 ומעלה עליך להשתמש בגרסת הליבה של AssertJ 2.x.x.

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

3. הקדמה

AssertJ מספק קבוצה של שיעורים ושיטות שימוש המאפשרות לנו לכתוב קביעות שוטפות ויפות בקלות עבור:

  • ג'אווה רגילה
  • ג'אווה 8
  • גויאבה
  • זמן ג'ודה
  • Neo4J ו-
  • רכיבי נדנדה

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

נתחיל בכמה דוגמאות, היישר מהתיעוד של AssertJ:

assertThat (frodo) .isNotEqualTo (sauron) .isIn (fellowshipOfTheRing); assertThat (frodo.getName ()) .startsWith ("Fro") .endsWith ("do") .isEqualToIgnoringCase ("frodo"); assertThat (fellowshipOfTheRing) .hasSize (9) .contains (frodo, sam) .doesNotContain (sauron);

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

4. AssertJ בפעולה

בחלק זה נתמקד בהקמת AssertJ ובחינת האפשרויות שלו.

4.1. מתחילים

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

ייבא org.assertj.core.api.Assertions סטטי. *;

4.2. טענות כתיבה

על מנת לכתוב טענה, אתה תמיד צריך להתחיל בהעברת האובייקט שלך ל- Assertions.assertThat () שיטה ואז אתה עוקב אחר הטענות בפועל.

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

assertThat (anyRefenceOrValue);

אם אתה ממנף את תכונות השלמת הקוד שלך ב- IDE, כתיבת טענות AssertJ הופכת לקלה להפליא בשל השיטות התיאוריות שלה. כך זה נראה ב- IntelliJ IDEA 16:

תכונות השלמת הקוד של IDE

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

4.3. לְהִתְנַגֵד קביעות

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

בואו נסתכל על שתי דרכים בהן אנו יכולים להשוות בין השוויון בין שני עצמים. בהתחשב בשניים הבאים כֶּלֶב חפצים פידו ו fidosClone:

מעמד ציבורי כלב {פרטי מחרוזת; משקל צף פרטי; // גטרים וקובעים סטנדרטיים} כלב פידו = כלב חדש ("פידו", 5.25); כלב fidosClone = כלב חדש ("פידו", 5.25);

אנו יכולים להשוות שוויון עם הקביעה הבאה:

טוענים כי (פידו). isEqualTo (fidosClone);

זה ייכשל כמו שווה ל() משווה הפניות לאובייקטים. אם נרצה להשוות את התוכן שלהם במקום זאת, נוכל להשתמש בו isEqualToComparingFieldByFieldRecursively () ככה:

assertThat (fido) .isEqualToComparingFieldByFieldRecursively (fidosClone);

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

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

4.4. בוליאני קביעות

כמה שיטות פשוטות קיימות לבדיקת אמת:

  • נכון()
  • isFalse ()

בואו נראה אותם בפעולה:

assertThat ("". isEmpty ()). isTrue ();

4.5. ניתן להחזרה / מערך קביעות

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

רשימת רשימה = Arrays.asList ("1", "2", "3"); assertThat (list) .contains ("1");

או אם רשימה זה לא ריק:

assertThat (list) .isNotEmpty ();

או אם רשימה מתחיל בדמות נתונה. לדוגמא "1":

assertThat (list) .startsWith ("1");

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

הנה דוגמה לקביעה שבודקת אם רשימה מסופקת אינה ריקה, מכילה אלמנט "1", אינה מכילה אפסים ומכילה רצף של אלמנטים "2", "3":

assertThat (list) .isNotEmpty () .contains ("1") .doesNotContainNull () .containsSequence ("2", "3");

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

4.6. אופי קביעות

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

הנה דוגמה לקביעה שבודקת אם תו מסופק אינו 'a', נמצא בטבלת Unicode, גדול מ- 'b' ואותיות קטנות:

assertThat (someCharacter) .isNotEqualTo ('a') .inUnicode () .isGreaterThanOrEqualTo ('b') .isLowerCase ();

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

4.7. מעמד קביעות

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

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

assertThat (Runnable.class) .isInterface ();

או אם ברצונך לבדוק אם ניתן להקצות שיעור אחד מהשני:

assertThat (Exception.class) .isAssignableFrom (NoSuchElementException.class);

הכל אפשרי מעמד ניתן לראות קביעות ב תקציר ClassAssert תיעוד.

4.8. קוֹבֶץ קביעות

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

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

 assertThat (someFile) .exists () .isFile () .canRead () .canWrite ();

ניתן לראות את כל קביעות המחלקה האפשריות ב תקציר FileAssert תיעוד.

4.9. כפול / צף / שלם קביעות

כפול / צף / שלם ואחר מספר סוגים

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

assertThat (5.1) .isEqualTo (5, withPrecision (1d));

שים לב שאנחנו משתמשים כבר מיובאים withPrecision (קיזוז כפול) שיטת עוזר לייצור לְקַזֵז חפצים.

לקבלת קביעות נוספות, בקר בתיעוד של AbstractDoubleAssert.

4.10. InputStream קביעות

יש רק אחד InputStreamקביעה ספציפית זמינה:

  • hasSameContentAs (צפוי InputStream)

ובפעולה:

assertThat (ניתן) .hasSameContentAs (צפוי);

4.11. מַפָּה קביעות

מַפָּה קביעות מאפשרות לך לבדוק אם מפה מכילה רשומה מסוימת, קבוצת ערכים או מקשים / ערכים בנפרד.

וכאן תוכלו לראות דוגמה לקביעה שבודקת אם מפה נתונה אינה ריקה, מכילה מקש מספרי "2", אינה מכילה מקש מספרי "10" ומכילה ערך: מקש: 2, ערך: "a":

assertThat (map) .isNotEmpty () .containsKey (2) .doNotContainKeys (10) .contains (entry (2, "a"));

לקבלת קביעות נוספות, ראה תקציר MapAssert תיעוד.

4.12. זורק קביעות

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

בואו נסתכל על הדוגמא של קביעה שבודקת אם חריג נתון הושלך ויש לה הודעה המסתיימת ב- "c":

assertThat (לשעבר). hasNoCause (). hasMessageEndingWith ("c");

לקבלת קביעות נוספות, עיין בתיעוד של AbstractThrowableAssert.

5. תיאור קביעות

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

אם אתה מגדיר את הקביעה שלך כך:

assertThat (person.getAge ()). as ("הגיל של% s צריך להיות שווה ל 100", person.getName ()) .isEqualTo (100);

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

[גילו של אלכס צריך להיות שווה ל- 100] צפוי: אך היה:

6. ג'אווה 8

AssertJ מנצל את מלוא תכונות התכנות הפונקציונליות של Java 8. בואו נצלול לדוגמא ונראה אותה בפעולה. ראשית בואו נראה איך אנחנו עושים את זה ב- Java 7:

assertThat (fellowshipOfTheRing) .filteredOn ("מרוץ", HOBBIT). מכיל רק (סם, פרודו, פיפין, שמח);

כאן אנו מסננים אוסף על מרוץ ההוביטים ובג'אווה 8 אנו יכולים לעשות משהו כזה:

assertThat (fellowshipOfTheRing) .filteredOn (תו -> character.getRace (). שווה ל- (HOBBIT)). מכיל רק (סם, פרודו, פיפין, שמח);

אנו נחקור את יכולות Java8 של AssertJ במאמר עתידי מסדרה זו. הדוגמאות הנ"ל נלקחו מאתר אסרט ג'י.

7. סיכום

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

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

הַבָּא » AssertJ עבור גויאבה

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