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

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

05/01/2017

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

1. בדיקות מערכת

קוד:

it 'should fail gracefuly to reset password for email not in the DB' do
    visit new_user_password_path
    fill_in 'email-field', with: 'madeupemail@madeupaddress'
    click_on 'שלח הוראות לאיפוס הסיסמא'

    expect(page).to have_content('כתובת המייל לא נמצאה')
    expect(page).to have_current_path(user_password_path)
end

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

2. בדיקות יחידה

קוד:

it 'should archive cart after purchase is done' do
      cart_before_purchase = @order.cart
      job = Actions::PurchaseFinalizer.new
      job.perform(:order => @order)

      expect(cart_before_purchase.archive).to be_truthy
      expect(@user.cart.empty?).to be_truthy
end

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

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