python单元测试来测试循环而不是中断

Posted

技术标签:

【中文标题】python单元测试来测试循环而不是中断【英文标题】:python unit testing to test over the loop and not to break 【发布时间】:2016-01-05 04:48:50 【问题描述】:
def test2_1_wiered_chars(self):
    for char in l_wchar:
      self.assertFalse(is_number(char), msg='failed for char '.format(char) )

我将一个列表传递给函数is_number 以检查它是否不是数字。该列表具有字母和数字的组合。当它按预期达到第一个数字时,测试失败。但它跳出了循环,并没有显示它与列表的其余索引的行为方式。在一个测试用例中测试列表的所有值的正确方法是什么?

【问题讨论】:

看看这个:***.com/a/4744463/1113211。你可能会从这里得到答案。 【参考方案1】:

您不应该在一个测试用例中包含所有测试数据。测试数据应该在测试用例之外。这应该适合您的目的:

class CharTests(unittest.TestCase):
    pass

def test_gen(char):
    def test_method(self):
        return self.assertTrue(char.isdigit())
    return test_method

if __name__ == '__main__':

    for index, char in enumerate(l_wchar):
        test_name = 'test_0'.format(index)
        test = test_gen(char)
        setattr(CharTests, test_name, test)

    suite = unittest.TestLoader().loadTestsFromTestCase(CharTests)
    result = unittest.TextTestRunner(verbosity=2).run(suite)

对于字符串中的每个字符,将一个测试用例方法附加到类CharTests,然后执行该套件。这将为您提供哪些测试用例失败的详细信息

【讨论】:

谢谢。将是我的测试框架工作研究的重要知识【参考方案2】:
def test2_1_wiered_chars(self)
  numbers = [char for char in l_wchar if is_number(char)]
  self.assertFalse(numbers, msg='failed for char(s) '.format(numbers))

为失败的对象创建一个新列表,并在完成后断言您的新列表为空。空列表是错误的,所以如果列表中有任何整数,这将失败。

注意:如果l_wchar 非常大并且包含很多数字,这可能会导致内存效率极低。制作两份副本可能不切实际或不可能。

【讨论】:

感谢您的回复。为了我的目的,这将暂时满足我的需要 如果此答案对您有所帮助,请考虑单击复选标记以将其表示为答案。

以上是关于python单元测试来测试循环而不是中断的主要内容,如果未能解决你的问题,请参考以下文章

测试给定的输入值是不是不会从 while True 循环中中断

Python 单元测试

python 单元测试,unittest 测试框架

为啥使用集成测试而不是单元测试是一个坏主意?

Python 中 unittest 单元测试框架中需要知识点

在开发和测试阶段而不是生产阶段激活单元测试