单元测试两个列表,如果存在差异,请打印/显示它

时间:2015-07-08 14:56:07

标签: python unit-testing

我昨天开始使用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)...失败

=============================================== =======================

失败:test_compare_two_lists_should_fail(主要 .TestCase)

追踪(最近一次通话):   文件" C:/some_dir/TestCase.py",第34行,在test_compare_two_lists_should_fail中     self.assertListEqual(a,b,'列表是不等的') AssertionError:列表是不等的

在0.001s中进行2次测试

失败(失败= 1)

2 个答案:

答案 0 :(得分:3)

问题是您在调用assertListEqual时指定的消息。

来自these docs

  

参数数量:

     

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 ===========================

很容易写出来并且非常明显的消息。试一试!