gpt4 book ai didi

python - 断言真与断言不是无

转载 作者:行者123 更新时间:2023-12-03 18:29:22 26 4
gpt4 key购买 nike

我正在与一位同事进行一些自动化测试,我们想知道我们的方法是否存在任何差异。

我们有一个返回 HTTP 响应对象的方法。有时,它可能返回 None,但通常是一个对象。

原代码是:

self.assertTrue(response)

但我觉得它可能更具可读性:
assert response is not None

我研究了关于真实性的文档中的差异,所以我知道会返回 true 的东西不一定是 None 。但是,在大多数情况下,两者都会起作用。并且许多现有的测试都断言为真,而不是断言没有。

为什么一种技术会比另一种更好?

最佳答案

tldr;

通常存在功能差异,但在您的特定情况下,两种技术的执行结果将相同。现在这仅取决于您是否愿意明确或简洁。

完整答案

假设 a是Python中的一个变量,两者之间有区别:

assert a


assert a is not None

在第一种情况下,您正在评估 回拨到bool()内置在对象上,它遵循多种策略来获得结果,正如已经讨论过的 here .

这仅根据对象的类实现进行评估。你看你的类(class)了吗 response目的?它会告诉你如何 bool(response)行为。

在第二种情况下,您正在评估 a因为不是 None .这是完全不同的。例如,一个空的 list将评估为 False但不是 None :
>>> a = []
>>> a is not None
True
>>> assert a is not None
>>> assert a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError

如果您的响应对象是从 list 派生的子类,那么它可能会以相同的方式运行,因此评估 response 的空性不等于评估 responseNone .

在你的情况下,我猜你的 response对象由 request 提供图书馆。如果是这样,那么是的,在您的特定情况下,这两种技术在功能上是等效的,尽管您应该注意到对 None 进行评估后的性能提升很小。 .

关于python - 断言真与断言不是无,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59067649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com