unittest.TestCase.assertEqual 的参数顺序

问题描述 投票:0回答:3

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

一方面,我看到很多代码都使用

assertEqual(actual, expected)
。这包括 unittest 文档中的示例Django 文档中的示例

但是,这个测试

assertEqual('foo', 'bar')
给了我输出

- foo
+ bar

这恰好与使用

assertEquals( 'foo', 'bar' );

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

PHPUnit 将

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

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

我检查了unittest方法的定义,尽管它具有非常有用的

first, second
参数名称。

python django python-unittest
3个回答
7
投票

我通常使用

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

6
投票

根据

assertEqual
文件:

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

因此,您可以将预期值和实际值放在任何地方,它都会返回相同的结果。但通常的做法是使用“实际”结果作为第一个参数,使用“预期”结果作为第二个参数。它也在 Python 3 的单元测试示例中进行了演示: s = 'hello world' self.assertEqual(s.split(), ['hello', 'world'])

assertGreaterEqual(a, b)

0
投票
actual, expected

),因为它期望a >= b,换句话说,实际值更大大于或等于期望值。除非您采用正确的顺序,否则您的断言失败消息将会令人困惑。

PHPUnit 和其他基于 jUnit 的测试框架通常使用 (
expected, actual
)


© www.soinside.com 2019 - 2024. All rights reserved.