有没有办法告诉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!')
有没有办法告诉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!')
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
是让try
块内self.assert*
电话,打印抓住了错误,并提高AssertionError
循环后明确,如果至少一个测试失败。
一般没有。单元测试首先失败。如果您想比较所有行,您需要有一个本地列表,然后将不同的行放入列表中。然后断言列表长度为零。或者是一个本地布尔变量。
或者,你可以做一个数据驱动测试与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文件。
我还没有看到一个单元测试框架,积累错误并将它们全部报告。看起来标准是在第一次失败时失败。 – TGH 2014-10-20 04:37:07
@TGH:我有; [googletest](https://code.google.com/p/googletest/wiki/Primer)具有可在失败时继续运行的'EXPECT'宏和立即中止的'ASSERT'宏。 – user2357112 2014-10-20 04:44:01
@ user2357112好有趣。我想这是有道理的,因为它只是框架创建者所做的设计选择。我猜一个常见的模式是当断言失败时抛出异常,如果需要的话,留给调用者实现他们自己的异常计数。 – TGH 2014-10-20 04:46:39