2016-11-15 46 views
2

後:如何遍歷Python單元測試運行器的所有成功測試結果?

import unittest 
loader = unittest.TestLoader() 
tests = loader.discover('.') 
testRunner = unittest.runner.TextTestRunner() 
testResult = testRunner.run(tests) 

我可以得到一個列表故障名稱和消息:

for t in testResult.failures: 
    print t[0].id() 
    print t[1] 

如何做的成功一樣嗎?

我希望能夠通過覆蓋TextTestRunner中的某些東西來達到目的。什麼是最簡單的方法?

在Python 2.7上測試。

回答

1

我在過去做過類似的事情。我會做到這一點的方法是首先建立在從TestTextResult繼承與自定義addSuccess方法,該方法將在每個測試的成功被稱爲(addFailure就是失敗的測試獲得附加failures方法)測試結果類:

from unittest.runner import TextTestResult, TextTestRunner 

class MyTestResult(TextTestResult): 

    successes = [] # As OP points out, this makes more sense as instance attribute 

    def addSuccess(self, test): 
     super(TextTestResult, self).addSuccess(test) 
     self.successes.append(test) # add other info if you want 

,然後讓自己的自定義測試運行,將您的自定義測試結果作爲resultclass

class MyTestRunner(TextTestRunner): 

    resultclass = MyTestResult  
    # If this is your only customization, you can just pass 
    # the test runner class to `TextTestRunner`; see OP's answer 
+0

謝謝!我已經做了一些小的改進:http://stackoverflow.com/a/40614410/895245但是你讓我走上正軌。 –

1

elethan把我放在正確的方向:https://stackoverflow.com/a/40613695/895245

這是我使用TextTestRunner(resultclass=並添加一個漂亮的構造後得到:

import unittest 
from unittest.runner import TextTestResult 

class TextTestResultWithSucesses(TextTestResult): 
    def __init__(self, *args, **kwargs): 
     super(TextTestResultWithSucesses, self).__init__(*args, **kwargs) 
     self.successes = [] 
    def addSuccess(self, test): 
     super(TextTestResultWithSucesses, self).addSuccess(test) 
     self.successes.append(test) 

loader = unittest.TestLoader() 
tests = loader.discover('.') 
testRunner = unittest.runner.TextTestRunner(resultclass=TextTestResultWithSucesses) 
testResult = testRunner.run(tests) 
for t in testResult.failures: 
    print t[0].id() 
    print t[1] 
print 
for t in testResult.errors: 
    print t[0].id() 
    print t[1] 
print 
for t in testResult.successes: 
    print t.id() 
+0

不錯!是的,我的例子是從一些舊代碼中複製而來的,我在其中定製了有關測試運行器的其他內容,但如果您只需要覆蓋'resultclass',這就更有意義了。 – elethan

相關問題