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)\u211d 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. 回溯資訊:::= 字串+。

輸出結果範例 (通過):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) ... 預期失敗 testFail (foo.testFoo) ... 失敗 testFailWithDocString (foo.testFoo) foo bar ... 失敗 testOk (foo.testFoo) ... 成功 testOkWithDocString (foo.testFoo) foo bar ... 成功 testSkipped (foo.testFoo) ... 略過「reason」 foo' testUnexpectedSuccess (foo.testFoo) ... 意外成功

====================================================================== 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) ---------------------------------------------------------------------- 回溯記錄 (最近的呼叫在最末端):檔案 "foo.py", 行 8, 在 testFail self.assertEqual(2+2, 5) AssertionError: 4 != 5

====================================================================== 失敗: testFailWithDocString (foo.testFoo) foo bar ---------------------------------------------------------------------- 追蹤記錄 (最近的呼叫在最下方):檔案 "foo.py", 行 31, 在 testFailWithDocString 中 self.assertEqual(2+2, 5) AssertionError: 4 != 5

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

失敗 (失敗次數=2、錯誤次數=1、略過次數=1、預期失敗次數=1、非預期成功次數=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 單元測試輸出內容,並回報剖析結果。

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 單元測試輸出內容,並回報剖析結果。

MultiLineReceiver 中的基礎方法不同,這個方法應只呼叫一次,且必須提供完整的輸出內容。

參數
lines String

setFinalizeWhenParsing

public void setFinalizeWhenParsing (boolean shouldFinalize)

參數
shouldFinalize boolean