Pytest 触发 AssertionError:
Posted
技术标签:
【中文标题】Pytest 触发 AssertionError:【英文标题】:Pytest Triggers AssertionError: 【发布时间】:2022-01-21 15:39:11 【问题描述】:我正在关注 Zed Shaw 的 Learn Python the Hardway 中的 ex47,但是,在书中他使用的是过时的软件 (Nose)。我已将他的代码/我的代码转换为 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 等效函数:断言 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 等于字典。
有人可以解释为什么“==”符号必须在那里吗?
【问题讨论】:
【参考方案1】:使用带逗号的断言是告诉断言语句进行多个断言。例如assert 1==1, 2==2
。
在assert gold.name, "GoldRoom"
的情况下,您要求python 断言gold.name
和"GoldRoom"
是非空的——它们是。 不是实际上是在测试它们之间的相等性。
例如试试
num1 = 10
num2 =11
assert num1, num2
assert num1 == num2
第一个断言将通过,因为数字大于 0(因此作为 bool true)。第二个将失败,因为数字不相等。
我断言 gold.paths 等于字典
您是在断言 value,而不是 type。要断言gold.paths
是一个字典,正确的断言是assert type(gold.paths) == dict
更多信息here
【讨论】:
以上是关于Pytest 触发 AssertionError:的主要内容,如果未能解决你的问题,请参考以下文章
[接口测试_B] 03 Pytest断言处理_assert和异常断言
iOS自动化探索自动化测试框架pytest - fixtures