[英]python unit testing to test over the loop and not to break
def test2_1_wiered_chars(self):
for char in l_wchar:
self.assertFalse(is_number(char), msg='failed for char {}'.format(char) )
我正在将列表传递给函数is_number
以检查它是否不是数字。 该列表包含字母和数字的组合。 当测试达到预期的第一个数字时,测试将失败。 但是它突围而出,并且没有显示它如何与列表的其余索引一起工作。 在一个测试案例中测试列表的所有值的正确方法是什么?
您不应在一个测试用例中拥有所有测试数据。 测试数据应在测试用例外部。 这应该适合您的目的:
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
类中,然后执行该套件。 这将为您提供详细信息,哪些测试用例失败
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
很大并且包含很多数字,则可能会导致内存效率l_wchar
。 制作两个副本可能不可行或不可能。
assert
的目的与您尝试做的相反。 在测试某项内容时(在您的情况下,如果字符列表中有一个数字)并且某处失败一次 ,则继续运行该测试没有任何意义-该测试已经失败。
如果您想知道char是数字的所有情况,则应将代码更改为
results = []
for char in l_wchar:
if is_number(char):
msg='failed for char {}'.format(char)
print msg
results.append(True)
然后,您将得到一个列表,其中所有值为True
索引对应于另一个列表中的数字。
要继续asserting
即说明测试是否失败),只需在最后完成
assertFalse(any(results))
但是,请务必注意,这不是有效且正确的测试。 您不必测试所有内容即可知道测试是否失败。 第一次出现意外情况时,测试应失败 (并停止)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.