QC הוא כלי בדיקה המאפשר לך לכתוב תכונות שאתה מצפה להחזיק נכון, ולתת למחשב ליצור מקרי מבחן אקראיים כדי לבדוק שנכסים אלה למעשה להחזיק & nbsp;. לדוגמא, אם אתה כתבת לדחוס ולשחרר לחץ פונקציות ל כמה תכנית דחיסת נתונים, רכוש ברור למבחן הוא שהדחיסה ולחץ תוך מחרוזת נותנת בחזרה את המחרוזת המקורית. הנה איך אתה יכול לבטא את זה:
unittest יבוא
QC יבוא
TestCompression כיתה (unittest.TestCase):
& Nbsp; @ qc.property
& Nbsp; def test_compress_decompress (עצמי):
& Nbsp; "" ". מבחן שדחיסה ולחץ התוך מחזיר את הנתונים המקוריים" ""
& Nbsp; נתונים = qc.str () # מחרוזת שרירותית. ערכים אקראיים.
& Nbsp; self.assertEqual (נתונים, לשחרר לחץ (לדחוס (נתונים)), repr (נתונים))
זה מבחן רגיל עם מסגרת unittest המובנה של פייתון (וזו הסיבה שיש כל כך הרבה מוכן מראש). לחלופין, אתה יכול לעשות בדיוק את אותו דבר עם מסגרת בדיקות שונה, כמו האף די נעים, המינימלי המפורט. המעצב @ qc.property מנהל את הפונקציה המעוטרת מספר פעמים, ובכל פעם חזר על ידי ערכי פונקציות כמו qc.string () שונים. במילים אחרות, QuickCheck תואם פחות או יותר בכל מסגרת בדיקה יחידה שם בחוץ; זה לא תובעני במיוחד.
פונקציות כמו qc.str (), qc.int (), וכן הלאה, ליצור ערכים שרירותיים מסוג מסוים. בדוגמא לעיל, אנחנו טענה כי הנכס נכון לגבי כל המיתרים. כאשר אתה מפעיל את הבדיקות, QuickCheck יפיק מחרוזות אקראיות לבדיקה.
תוכל להבחין כי אמרתי "אקראי", לא "אקראי". הדבר זה מכוון. התפלגות הערכים מעודכנת על מנת להיות כוללות ערכים מעניינים, כמו מחרוזות ריקות, או מחרוזות עם דמויות NUL באמצע, או מחרוזות המכילים טקסט באנגלית. באופן כללי, QuickCheck מנסה לתת שילוב טוב של ערכים מסובכים חכמים ואקראי. זה בעצם מה שהיית עושה, אם היה צריך לכתוב מקרי מבחן באמת יסודיים בעבודת יד, חוץ מזה שאתה לא צריך לעשות את זה. בפועל, יש לו את המחשב פחות דעות קדומות לגבי מה מהווה נתונים שפויים, כך שזה יהיה לעתים קרובות למצוא באגים שלעולם לא היו עולים בדעתך לכתוב מקרי מבחן ל. הוא לא יודע איך להימנע במודע באגים.
אינך מוגבל לפונקציות הערך שרירותיות המובנה. אתה יכול להשתמש בם כאבני בניין ליצירה משלך. למשל:
הכיתה פוינט (אובייקט):
& Nbsp; def __init __ (עצמי, x, y):
& Nbsp; self.x, self.y = float (x), לצוף (y)
נקודת def ():
& Nbsp; "" "קבל נקודה שרירותית." ""
& Nbsp; x = qc.int (-20, 20)
& Nbsp; y = qc.int (-34, 50)
& Nbsp; לחזור נקודה (x, y)
לאחר מכן תוכל להשתמש בזה כדי ליצור ערכי נקודה שרירותיים בנכסים. הנה מבחן בסגנון האף:
@ Qc.property
test_triangle_inequality def ():
& Nbsp; pt = נקודה ()
& Nbsp; טוען שרירי בטן (pt.x) + שרירי בטן (pt.y)> = math.sqrt (pt.x ** 2 + pt.y ** 2), (pt.x, pt.y)
כאשר אתה מפעיל את זה, משהו קסום קורה: QuickCheck ינסה ליצור ערכים מסובכים למשתני שני x ו- y בכיתת פוינט, יחד, כך שתראה כמו נקודות (0, 0), (1, 1), ( 0, 1), (385,904 0), כמו גם אלה, אקראיים לחלוטין כמו (584, -35,809,648). במילים אחרות, ולא רק ציור x וערכי y מזרם של מספרים אקראיים עם כמה ערכים מסובכים בזה, QuickCheck יהיה למעשה מנסה ליצור שילובים מסובכים של קואורדינטות x ו- y.
פונקציות להשגת נתונים שרירותיים
- Int (נמוך, גבוה) נותן ints, בין הגבולות אופציונליים הנמוכים וגבוהים.
- ארוך (נמוך, גבוה) נותן מתגעגע, בין הגבולות אופציונליים הנמוכים וגבוהים.
- מצוף (נמוך, גבוה) נותן צף, בין הגבולות אופציונליים הנמוכים וגבוהים. אין ערכי אינסוף או NaN.
& Nbsp; str (אורך = אין, אין maxlen =) נותן מחרוזות, של str הסוג. הקידוד הוא UTF-8. אם האורך הוא נתון, המחרוזות תהיה בדיוק זמן ש. אם maxlen הוא נתון, אורך המחרוזת יהיה תווים בmaxlen ביותר.
- Unicode (אורך = אין, אין maxlen =) נותן מחרוזות Unicode, Unicode של הסוג. אם האורך הוא נתון, המחרוזות תהיה בדיוק זמן ש. אם maxlen הוא נתון, אורך המחרוזת יהיה תווים בmaxlen ביותר.
- שם () נותן שמות, ב- Unicode. אלה נעות בין פרוזאיות, כמו "ג'ון סמית '", לאקזוטיים - שמות המכילים חללים שאינם שבירה, או כתובות דואר אלקטרוני, או תווי Unicode מחוץ לבסיסי רב לשוני המטוס. זה, אם בכלל, פחות סוטה מהשמות שתראה בקבוצה גדולה מספיק של נתונים באינטרנט.
- NameUtf8 () הוא זהה לשם () לקודד ("UTF8")..
- FromList (פריטים) מחזיר פריטים אקראיים מתוך רשימה. זה בעיקר שימושי ליצירת פונקציות משלך מחולל נתונים שרירותיות.
- Randstr (אורך = אין, maxlen = sys.maxint) נותן מחרוזות של בתים אקראיים. אם האורך הוא נתון, המחרוזות תהיה בדיוק זמן ש. אם maxlen הוא נתון, אורך המחרוזת יהיה לכל היותר maxlen בתים.
המחרוזות המיוצרות על ידי str ויוניקוד הם אקראיים, אבל קצת מאמץ כבר הכניס לתוך מה שהופך אותם מספיק סוטה כמציאת באגים בהמון קוד עיבוד מחרוזת. שם הרשימה מבוססת באופן רופף על זכרונות נוראים לראות את התרסקות קוד שם עיבוד נתונים על עולם האמיתי, שוב ושוב ושוב, כפי שהוא הפך יותר ויותר ברור שהעולם הוא מטורף, ואנחנו באמת אבודים. (תחושה זו עוברת רגע שאתה מקבל כיסוי בדיקות מספיק ודברים סוף סוף להפסיק מתרסק. יש תקווה!)
שם ודוגמא מחרוזת נתונים בqc.arbitrary יכולים להיות מעניינים כמקור לנתוני מקרה מבחן deteministic יותר. תרגיש חופשי לשאול כל זה. Internals הם קסם, אבל בחלקים הפנימיים הקסומים, המעניין ביותר שבם הם בqc.arbitrary וQC
דרישות :.
- Python
תגובות לא נמצא