מדוע לא בודקים Private Methods ב–Unit Tests?

1 בספטמבר 2014

תגיות: , , ,
תגובה אחת

הערה: אני רוצה לפתוח בפוסט קצת מתקדם יותר על Unit Testing, בהמשך אפרסם דברים יותר בסיסיים.Why not to test Private Methods in Unit Tests

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

“ב – Unit Testing אנחנו לא כותבים בדיקות ל – Private Methods בדרך כלל, במידה ואתם מרגישים שצריך לכתוב ל – Private Method בדיקה יש לבחון קודם כול האם הקוד כתוב כמו שצריך או שדרוש Refactor”

לאחר משלוח הטיפ הנ”ל נוצרו דיונים שהעלו שאלות מהמפתחים, למה בעצם לא בודקים Private Methods מה ההיגיון מאחורי האמרה?

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

 

אני אנסה לענות על השאלה לא בצורה מדעית אלה בצורה לוגית:

כאשר אני בונה Class אני חושף את היכולות שלה כך שכול מי שמייצר אובייקט מאותו ה – Class יוכל להשתמש בכול היכולות.

אני מייצר Private Methods כך שאני יוכל לייצר את הקוד בצורה קריאה ומיינטנבילית (Maintainable)

כלל הפעולות שנמצאות בתוך ה – Private Methods יכולות להיבדק מיתוך המטודות החשופות (Public, Internal וכו’)

 

מה קורה אם אני רואה מטודה שאני מרגיש שאני צריך לבדוק אותה בנפרד?

רוב הסיכויים שהיא נמצאת לא במקום הנכון, לרוב נכון יותר שהיא “תחייה” ב – Class אחר, וה – Class הנוכחי ישתמש בה דרך ה – Class החדש.

יש לזכור ש – Private Methods הוא אימפלמנטציה שאותה אני רוצה להסתיר מהמשתמש ב – Class, בדיקה של Private Methods בעצם “שובר” את ה – encapsulation של ה – Class.

לסיום ציתות מהספר “Pragmatic Unit Testing” של Dave Thomas ו – Andy Hunt: (ללא תרגום)

“In general, you don’t want to break any encapsulation for the sake of testing (or as Mom used to say, “don’t expose your privates!”). Most of the time, you should be able to test a class by exercising its public methods. If there is significant functionality that is hidden behind private or protected access, that might be a warning sign that there’s another class in there struggling to get out.”

 

אני מקווה שעכשיו הנקודה הזאת ברורה יותר…

 

תיהנו!!!

יש לכם שאלות בנושא Visual Studio ו-ALM? כנסו לפורום שלנו בעברית.

EranRusoהפוסט נכתב על ידי ערן רוסו , מנהל חטיבת ה – ALM בחברת SuperDerivatives.
כנסו לבלוג של ערן וקראו על עוד נושאים מעולם ה- ALM וה- TFS ואתם מוזמנים גםלקבוצת הלינקדאין

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

תגובה אחת

  1. דוד2 בספטמבר 2014 ב 12:21

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

    הגב