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

OK

输出示例(失败):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)

待办事项:考虑重构整个类,现在的处理方式非常混乱。

摘要

公共构造函数

PythonUnitTestResultParser(ITestInvocationListener listener, String runName)

创建一个新的 PythonUnitTestResultParser,用于向给定的 ITestInvocationListener 报告。

PythonUnitTestResultParser(Collection<ITestInvocationListener> listeners, String runName)

创建一个新的 PythonUnitTestResultParser,用于向给定的 ITestInvocationListener 报告。

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

创建一个新的 PythonUnitTestResultParser,用于向给定的 ITestInvocationListener 报告,并指定包含和排除过滤器。

公共方法

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

处理 Python unittest 输出并报告解析结果。

void setFinalizeWhenParsing(boolean shouldFinalize)

公共构造函数

PythonUnitTestResultParser

public PythonUnitTestResultParser (ITestInvocationListener listener, 
                String runName)

创建一个新的 PythonUnitTestResultParser,用于向给定的 ITestInvocationListener 报告。

参数
listener ITestInvocationListener

runName String

PythonUnitTestResultParser

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

创建一个新的 PythonUnitTestResultParser,用于向给定的 ITestInvocationListener 报告。

参数
listeners Collection

runName String

PythonUnitTestResultParser

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

创建一个新的 PythonUnitTestResultParser,用于向给定的 ITestInvocationListener 报告,并指定包含和排除过滤器。

参数
listeners Collection

runName String

includeFilters Set

excludeFilters Set

公共方法

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