断言true与assert不是None

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

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

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

原始代码是:

self.assertTrue(response)

但是我觉得拥有它可能更易读:

assert response is not None

我调查了真实性文档中的差异,因此我知道可以返回true的东西不一定是None。但是,在大多数情况下,两者都可以工作。而且许多现有的测试都在声明true,而不是没有声明。

有什么理由使一种技术比另一种更好?

python automated-tests
1个回答
0
投票

tldr;

在Genreal中存在功能上的差异,尽管在您的特定情况下,两种技术的执行结果都相同。现在,这仅取决于您明确或简洁的意愿。

完整答案

假设a是Python中的变量,它们之间有很大的区别:

assert a

assert a is not None

在第一种情况下,您正在评估对象上的[[对bool()调用的调用返回,该对象遵循多种策略来获得结果,正如已经讨论的here。] >这根据对象的类实现评估

only

。您看过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的空度并不等同于将response评估为None

在您的情况下,我想您的response对象由request库提供。如果是这样,那么是的,在您的特定情况下,这两种技术在功能上是等效的,尽管您可能会发现,根据None评估,性能提升很小。

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