luc*_*mia 8 python testing unit-testing python-unittest
有没有办法告诉python unittest在一个方法中执行所有断言并显示它失败的所有情况,而不是在第一次失败时停止.
class MyTestCase(TestCase):
def test_a(self):
with open('testcase.txt') as ifile:
for iline in ifile:
self.assertEqual(iline, 'it is a test!')
Run Code Online (Sandbox Code Playgroud)
vau*_*tah 11
Python 3.4引入了subTest
上下文管理器.你的代码看起来像
class MyTestCase(TestCase):
def test_a(self):
with open('testcase.txt') as ifile:
for iline in ifile:
with self.subTest(line=iline):
self.assertEqual(iline, 'it is a test!')
Run Code Online (Sandbox Code Playgroud)
实现这一目标的丑陋方法subTest
是self.assert*
在try
块内进行调用,打印捕获的错误,并AssertionError
在循环后显式提升(如果至少一个测试失败).
或者,您可以在package的帮助下进行数据驱动测试:ddt
DDT(数据驱动测试)允许您通过使用不同的测试数据运行一个测试用例来增加它,并使其显示为多个测试用例。
import unittest
from ddt import ddt, data
@ddt
class FooTestCase(unittest.TestCase):
@data('it is a test!', 'it is a test!', 'something else')
def test_lines(self, value):
self.assertEqual(value, 'it is a test!')
Run Code Online (Sandbox Code Playgroud)
ddt
也可以有来自文件的数据,但它必须是 JSON 文件。