PythonUnitTestResultParser

public class PythonUnitTestResultParser
extends MultiLineReceiver

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


解讀使用 Python 的 unittest 架構執行的測試輸出內容,並將其轉換為一系列 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

====================================================================== FAIL: 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:考慮重構整個類別,目前處理方式相當混亂。

摘要

公用建構函式

PythonUnitTestResultParser( listeners, String runName)

建立新的 PythonUnitTestResultParser,向指定的 ITestInvocationListener 回報。

PythonUnitTestResultParser( listeners, String runName, includeFilters, excludeFilters)

建立新的 PythonUnitTestResultParser,向指定的 ITestInvocationListener 回報,並指定包含和排除篩選器。

公用方法

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

處理 Python unittest 輸出內容,並回報剖析結果。

void setFinalizeWhenParsing(boolean shouldFinalize)

公用建構函式

PythonUnitTestResultParser

public PythonUnitTestResultParser ( listeners, 
                String runName)

建立新的 PythonUnitTestResultParser,向指定的 ITestInvocationListener 回報。

參數
listeners

runName String

PythonUnitTestResultParser

public PythonUnitTestResultParser ( listeners, 
                String runName, 
                 includeFilters, 
                 excludeFilters)

建立新的 PythonUnitTestResultParser,向指定的 ITestInvocationListener 匯報,並指定納入和排除篩選器。

參數
listeners

runName String

includeFilters

excludeFilters

公用方法

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