有没有办法告诉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!')
答案 0 :(得分: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!')
在没有subTest
的情况下实现此目的的丑陋方法是在self.assert*
块内进行try
调用,打印捕获的错误,并在循环后显式提升AssertionError
如果至少有一次测试失败。
答案 1 :(得分:3)
或者,您可以在ddt
package的帮助下进行数据驱动测试:
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!')
ddt
也可以包含data coming from a file,但它必须是JSON文件。
答案 2 :(得分:1)
一般没有。单元测试首先停止失败。如果要比较所有行,您需要有一个本地列表,然后将不同的行放入列表中。然后声明列表长度为零。或者是一个本地布尔变量。