PythonUnitTestResultParser

public class PythonUnitTestResultParser
extends MultiLineReceiver

java.lang.Object
   ↳ com.android.ddmlib.MultiLineReceiver
     ↳ com.android.tradefed.testtype.PythonUnitTestResultParser


מפרש את הפלט של בדיקות שמופעלות באמצעות מסגרת unittest של Python ומתרגם אותו לקריאות בסדרה של ITestInvocationListener. הפלט מהבדיקות האלה תואם לדקדוק EBNF הבא:

TestReport ::= TestResult* Line TimeMetric [FailMessage*] Status. TestResult ::= string \u201c(\u201cstring\u201d)\u201d \u201c\u2026\u201d SingleStatus. FailMessage ::= EqLine \u201cERROR:\u201d string \u201c(\u201cstring\u201d)\u201d Line Traceback Line. SingleStatus ::= \u201cok\u201d | \u201cERROR\u201d. ‫TimeMetric ::= \u201cRan\u201d integer \u201ctests in\u201d float \u201ds\u201d. Status ::= \u201cOK\u201d | \u201cFAILED (errors=\u201d int \u201c)\u201d. Traceback ::= string+.

פלט לדוגמה (העברה): test_size (test_rangelib.RangeSetTest) ... ok test_str (test_rangelib.RangeSetTest) ... ok test_subtract (test_rangelib.RangeSetTest) ... ok test_to_string_raw (test_rangelib.RangeSetTest) ... ok test_union (test_rangelib.RangeSetTest) ... ok

---------------------------------------------------------------------- Ran 5 tests in 0.002s

אישור

פלט לדוגמה (נכשל) test_size (test_rangelib.RangeSetTest) ... ERROR

====================================================================== ERROR: test_size (test_rangelib.RangeSetTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "test_rangelib.py", line 129, in test_rangelib raise ValueError() ValueError ---------------------------------------------------------------------- Ran 1 test in 0.001s FAILED (errors=1)

פלט לדוגמה עם כמה מקרים קיצוניים (נכשל): testError (foo.testFoo) ... ERROR testExpectedFailure (foo.testFoo) ... expected failure testFail (foo.testFoo) ... FAIL testFailWithDocString (foo.testFoo) foo bar ... FAIL testOk (foo.testFoo) ... ok testOkWithDocString (foo.testFoo) foo bar ... ok testSkipped (foo.testFoo) ... skipped 'reason foo' testUnexpectedSuccess (foo.testFoo) ... unexpected success

====================================================================== ERROR: testError (foo.testFoo) ---------------------------------------------------------------------- Traceback (most recent call last): File "foo.py", line 11, in testError self.assertEqual(2+2, 5/0) ZeroDivisionError: integer division or modulo by zero

====================================================================== נכשל: testFail (foo.testFoo) ---------------------------------------------------------------------- Traceback (most recent call last): File "foo.py", line 8, in testFail self.assertEqual(2+2, 5) AssertionError: 4 != 5

====================================================================== FAIL: testFailWithDocString (foo.testFoo) foo bar ---------------------------------------------------------------------- Traceback (most recent call last): File "foo.py", line 31, in testFailWithDocString self.assertEqual(2+2, 5) AssertionError: 4 != 5

---------------------------------------------------------------------- Ran 8 tests in 0.001s

FAILED (failures=2, errors=1, skipped=1, expected failures=1, unexpected successes=1)

TODO: כדאי לשקול לבצע refactoring של המחלקה המלאה, כי הטיפול בה די מבולגן כרגע.

סיכום

‫constructors ציבוריים

PythonUnitTestResultParser(ITestInvocationListener listener, String runName)

יוצרים PythonUnitTestResultParser חדש שמדווח לITestInvocationListener הנתון.

PythonUnitTestResultParser(Collection<ITestInvocationListener> listeners, String runName)

יצירת PythonUnitTestResultParser חדש שמדווח לITestInvocationListeners הנתונים.

PythonUnitTestResultParser(Collection<ITestInvocationListener> listeners, String runName, Set<String> includeFilters, Set<String> excludeFilters)

יוצרים PythonUnitTestResultParser חדש שמדווח לITestInvocationListeners שצוינו, עם מסנני הכללה והחרגה שצוינו.

‫methods ציבוריים

void finalizeParser()
boolean isCancelled()
void processNewLines(String[] lines)

עיבוד של פלט Python unittest ודיווח על תוצאות מנותחות.

void setFinalizeWhenParsing(boolean shouldFinalize)

‫constructors ציבוריים

PythonUnitTestResultParser

public PythonUnitTestResultParser (ITestInvocationListener listener, 
                String runName)

יוצרים PythonUnitTestResultParser חדש שמדווח לITestInvocationListener הנתון.

פרמטרים
listener ITestInvocationListener

runName String

PythonUnitTestResultParser

public PythonUnitTestResultParser (Collection<ITestInvocationListener> listeners, 
                String runName)

יצירת PythonUnitTestResultParser חדש שמדווח לITestInvocationListeners הנתונים.

פרמטרים
listeners Collection

runName String

PythonUnitTestResultParser

public PythonUnitTestResultParser (Collection<ITestInvocationListener> listeners, 
                String runName, 
                Set<String> includeFilters, 
                Set<String> excludeFilters)

יוצרים PythonUnitTestResultParser חדש שמדווח לITestInvocationListeners שצוינו, עם מסנני הכללה והחרגה שצוינו.

פרמטרים
listeners Collection

runName String

includeFilters Set

excludeFilters Set

‫methods ציבוריים

finalizeParser

public void finalizeParser ()

isCancelled

public boolean isCancelled ()

החזרות
boolean

processNewLines

public void processNewLines (String[] lines)

עיבוד של פלט Python unittest ודיווח על תוצאות מנותחות.

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

פרמטרים
lines String: המערך שמכיל את השורות החדשות.

setFinalizeWhenParsing

public void setFinalizeWhenParsing (boolean shouldFinalize)

פרמטרים
shouldFinalize boolean