Pytest Triggers AssertionError: {}

Pytest Triggers AssertionError: {}

我在 Zed Shaw 的 Learn Python the Hardway 中关注 ex47,但是,在书中他使用的是过时的软件 (Nose)。我已将他的 code/my 代码转换为 pytest,但我遇到了一些问题。

    def test_room():
    gold = Room("GoldRoom",
        """This room has gold in it you can grab.
        There's a door to the north.""")
#    assert_equal(gold.name, "GoldRoom")
#    assert_equal(gold.paths, {})
    assert gold.name, "GoldRoom"
    assert gold.paths, {}

我将 Nose 测试函数 asser_equal(a, b) 转换为 Pytest 等效函数:assert a, b。然而,当我 运行 它时,我只得到了这个测试的错误。其他两个测试以相同的格式通过。此外,错误仅指向行“assert gold.paths, {}”.

>       assert gold.paths, {}
E       AssertionError: {}
E       assert {}
E        +  where {} = <ex47.game.Room object at 0x7fd136193be0>.paths

Pytest 告诉我,如果我将“assert gold.paths, {}”更改为“assert gold.paths == {}”,它会通过。 这是误报吗?对我来说它读起来一样,我断言 gold.paths 等于字典。

谁能解释为什么必须有“==”符号?

将 assert 与逗号一起使用是告诉 assert 语句进行 多个 断言。例如 assert 1==1, 2==2.

assert gold.name, "GoldRoom" 的情况下,您要求 python 断言 gold.name"GoldRoom" 是非空的——它们确实是。 不是实际测试它们之间的相等性。

例如尝试

num1 = 10
num2 =11
assert num1, num2
assert num1 == num2

第一个断言将通过,因为数字大于 0(因此为布尔值 true)。第二个将失败,因为数字不相等。

I am asserting that gold.paths equals a dictionary

您声明的是,而不是类型。要断言 gold.paths 是一个字典,正确的断言是 assert type(gold.paths) == dict

更多信息here