Tôi chỉ đang sử dụng không giới hạn trong một thời gian ngắn. Tôi đang sử dụng Jython 2.7.10 "phát hành cuối cùng"Tôi làm cách nào để sử dụng unittest.TestResult?
Trong các tài liệu Python 2.7 giải thích TestResult nó nói:
Các phương pháp sau đây của lớp TestResult được sử dụng để duy trì cấu trúc dữ liệu nội bộ, và có thể được mở rộng trong các lớp con để hỗ trợ các yêu cầu báo cáo bổ sung. Điều này đặc biệt hữu ích trong các công cụ xây dựng hỗ trợ báo cáo tương tác trong khi các thử nghiệm là đang chạy.
startTest (thử nghiệm) ... stopTest (thử nghiệm) ... startTestRun() ... stopTestRun() ¶
Đó là những gì tôi muốn làm ... nhưng tôi không thể làm việc ra cách bạn sử dụng TestResult. Dưới đây là một SSCCE ...
import unittest
class TestResultX(unittest.TestResult):
def startTest(self, test):
print('# blip')
unittest.TestResult.startTest(self, test)
def stopTest(self, test):
print('# blop')
unittest.TestResult.stopTest(self, test)
def startTestRun(self):
print('# blep')
unittest.TestResult.startTestRun(self)
def stopTestRun(self):
print('# blap')
unittest.TestResult.stopTestRun(self)
class TestCaseX(unittest.TestCase):
def test_nonsense(self):
print('# wotcha')
self.assertTrue(False)
def run(self, test_result=None):
print('# spoons starting...')
test_result = TestResultX()
unittest.TestCase.run(self, test_result)
print('# ...spoons ended, tr %s' % (test_result, ))
unittest.main()
Kết quả trong:
# spoons starting...
----------------------------------------------------------------------
Ran 0 tests in 0.015s
OK
# blip
# wotcha
# blop
# ...spoons ended, tr <__main__.TestResultX run=1 errors=0 failures=1>
Câu hỏi:
- Tại sao nó nói
0 tests
? - Tại sao
blep
vàblap
(bắt đầu và kết thúc chạy) không được in?
Trên một lưu ý tổng quát hơn:
Có thể ai đó có thể trỏ đến một hướng dẫn/cuốn sách hay giải thích "sử dụng hợp lý"/"thực hành tốt" khi nói đến TestResult, TestRunner, TestLoader, vv Tôi đã nhận "TDD với Python", nhưng nó dường như không giải thích được điều này.
Có thể ai đó có thể cho tôi biết tại sao unittest2 thường dường như được sử dụng thay vì bỏ qua?
phụ lục
Sau những nỗ lực Omar Diab tại nhìn vào mã nguồn tôi đã cố gắng này:
def run(self, *args, **kvargs):
result = self.defaultTestResult()
startTestRun = getattr(result, 'startTestRun', None)
logger.info('# calling superclass run... startTestRun? %s' % (startTestRun,))
unittest.TestCase.run(self, *args, **kvargs )
logger.info('# ... superclass run ended')
Đáng tiếc là mỗi phương pháp test_XXX sau đó đã đưa:
# calling superclass run... startTestRun? <bound method TestResult.startTestRun of <unittest.result.TestResult run=0 errors=0 failures=0>>
setUp for test_that_stuff_happened (__main__.xx_FT)
tearDown for test_that_stuff_happened (__main__.xx_FT)
end tearDown...
. # ... superclass run ended
Tôi đang chạy vào điều này — phải nói, tài liệu cho tất cả điều này là khá khủng khiếp ... –