对于unittest中的循环

时间:2014-10-20 04:34:18

标签: python unit-testing 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!')

3 个答案:

答案 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)

一般没有。单元测试首先停止失败。如果要比较所有行,您需要有一个本地列表,然后将不同的行放入列表中。然后声明列表长度为零。或者是一个本地布尔变量。