我正在使用XMLTestRunner从Python运行Unit TestCases。
这是我的主要文件:
#LoggingService.py
class LoggerWriter:
# used to redirect console msgs to the log
def write(self, message):
log_event('warning', 'Console', message)
def direct_console_to_log():
global console_redirected
# This function can be called several times. Avoid redirecting more than once
if not console_redirected:
console_output = LoggerWriter()
sys.stderr = console_output
sys.stdout = console_output
console_redirected = True
def log_event(level, _id, event_details):
# log the event
pass
这是我的测试文件之一:
#LoggingServiceTest.py
import unittest
import LoggingService
from LoggingService import direct_console_to_log
class Test(unittest.TestCase):
@patch('LoggingService.log_event')
def test_log_writer(self,log_mock):
direct_console_to_log()
print ('console msg')
self.assertTrue(log_mock.called)
if __name__ == "__main__":
unittest.main()
我曾经从XMLRunner.py运行所有测试文件:
#XMLRunner.py
from xmlrunner import XMLTestRunner
import unittest
test_modules = [file1.Test, file2.Test, LoggingServiceTest.py, .... file25.Test]
suite = unittest.TestSuite()
for test_module in test_modules:
tests = unittest.TestLoader().loadTestsFromTestCase(test_module)
suite.addTests(tests)
if __name__ == '__main__':
# import xmlrunner
# unittest.main(testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
XMLTestRunner(output='test-reports').run(suite)
当我尝试从“XMLRunner.py”运行LoggingServiceTest.py文件时,测试报告不生成。但是当我尝试没有“LoggingServiceTest.py”时,报告生成成功。
我不确定,测试用例函数发生了什么 运行LoggingServiceTest.py 中的(test_log_writer(self,log_mock))。 任何人都可以清除我
我使用以下命令运行测试用例:
Python2.7.14\python.exe -m coverage run -p --branch --source=. --omit=Unit_Tests/*.py Unit_Tests/Testing.py
答案 0 :(得分:0)
最后,我在调试更多后得到了解决方案。
从XMLRunner启动测试用例时,它正在创建一些文件对象以写入stderr和stdout,并在sys.stderr, sys.stdout
变量中定义
我的测试用例会覆盖sys.stderr, sys.stdout
变量。
因此,XMLRunner尝试从sys.stderr, sys.stdout
获取文件对象,但它不存在,那么它就不会生成报告。