我昨天开始使用Python进行单元测试。我在网上看到了一个用assertEqual测试的例子,他自动打印出两个列表之间的差异。但是,似乎不会在我的脚本中发生。我怎么能得到它?
以下代码包含在从unittest.TestCase派生的类中:
def test_compare_two_lists_should_fail(self):
a = [1,2,3] # In my actual code this is generated by a module's function
b = [1,2,4]
self.assertListEqual(a, b, 'lists are inequal')
def test_compare_two_lists_should_not_fail(self):
a = [1,2,3] # In my actual code this is generated by a module's function
b = [1,2,3]
self.assertListEqual(a ,b, 'lists are inequal')
运行此测试时,会产生以下输出:
test_compare_two_lists_should_not_fail(主要 .TestCase)...确定 test_compare_two_lists_should_fail( main .TestCase)...失败
=============================================== =======================
追踪(最近一次通话): 文件" C:/some_dir/TestCase.py",第34行,在test_compare_two_lists_should_fail中 self.assertListEqual(a,b,'列表是不等的') AssertionError:列表是不等的
在0.001s中进行2次测试
失败(失败= 1)
答案 0 :(得分:3)
问题是您在调用assertListEqual
时指定的消息。
参数数量:
list1:第一个要比较的列表。
list2:要比较的第二个列表。
msg:在失败时使用的可选消息,而不是差异列表。
因此,如果您想查看列表之间的差异,请避免传递消息:
self.assertListEqual(a ,b)
顺便说一句,两个测试中都有相同的lists are inequal
消息。
答案 1 :(得分:1)
如果您从Python开始进行单元测试,我建议您使用pytest
。恕我直言,它更容易使用,失败消息比xUnit
更聪明。
使用pytest
,你会得到这样的结果:
def testFoo():
assert [1, 2, 3] == [1, 2, 4], 'lists are inequal'
结果:
================================== FAILURES ===================================
___________________________________ testFoo ___________________________________
def testFoo():
> assert [1, 2, 3] == [1, 2, 4]
E AssertionError: lists are inequal
E assert [1, 2, 3] == [1, 2, 4]
E At index 2 diff: 3 != 4
E Use -v to get the full diff
File "foo.py", line 2
AssertionError
========================== 1 failed in 0.07 seconds ===========================
很容易写出来并且非常明显的消息。试一试!