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
我在 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