unittest.TestCase.assertEqual的参数顺序

时间:2016-12-03 06:54:45

标签: python django python-unittest

assertEqual(actual, expected)还是assertEqual(expected, actual)

一方面,我看到很多代码使用assertEqual(actual, expected)。其中包括examples in the unittest docsexamples in the Django docs

但是,此测试assertEqual('foo', 'bar')正在为我提供输出

- foo
+ bar

这恰好与使用assertEquals( 'foo', 'bar' );

的PHPUnit测试相同
-'foo'
+'bar'

PHPUnit的第一个参数为$expected,后跟$actual。这种差异也是我对expected, actual所期望的。

所有这些Python代码我都看错了吗?

我检查了unittest方法的定义,尽管它有非常有用的first, second参数名称。

2 个答案:

答案 0 :(得分:3)

根据assertEqual文件:

  

测试第一和第二是否相等。如果值不相等,则测试将失败。

因此,您可以将预期和实际放在任何地方,它将返回相同的结果。但通常的做法是使用实际结果作为第一个参数,期望结果作为第二个参数。它也在Python 3's Unittest Example中得到证明:

s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])

答案 1 :(得分:1)

我通常使用assertEqual(expected, actual),因为输出消息更有意义。

代码:

from unittest import TestCase

class TestClass(TestCase):
    def test_equal(self):
        expected = 1
        actual = 2
        self.assertEqual(expected, actual)

输出:

2 != 1

Expected :1
Actual   :2

如果顺序相反,则消息将错误地显示:

Expected :2
Actual   :1