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 循环中中断