【问题标题】:Parameter order for unittest.TestCase.assertEqualunittest.TestCase.assertEqual 的参数顺序
【发布时间】:2016-12-03 06:54:45
【问题描述】:

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

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

但是,这个测试 assertEqual('foo', 'bar') 给了我输出

- foo
+ bar

这恰好与使用 assertEquals( 'foo', 'bar' ); 的 PHPUnit 测试相同

-'foo'
+'bar'

PHPUnit 将$expected 作为第一个参数,然后是$actual。这个差异也是我对expected, actual 的期望。

那么我看到的所有这些 Python 代码都做错了吗?

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

【问题讨论】:

    标签: python django python-unittest


    【解决方案1】:

    根据assertEqual 文档:

    测试 first 和 second 是否相等。如果值比较不相等,则测试将失败。

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

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

    【讨论】:

      【解决方案2】:

      我通常使用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
      

      【讨论】:

        猜你喜欢
        • 2019-09-15
        • 2012-02-20
        • 1970-01-01
        • 2017-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多