首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >assert true vs assert is not None

assert true vs assert is not None
EN

Stack Overflow用户
提问于 2019-11-27 18:06:13
回答 1查看 13.3K关注 0票数 8

我正在和一位同事一起做一些自动化测试,我们想知道我们的方法是否有什么不同。

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

原始代码是:

代码语言:javascript
复制
self.assertTrue(response)

但我觉得它可能更具可读性:

代码语言:javascript
复制
assert response is not None

我研究了文档中关于真实性的不同之处,所以我意识到返回true的东西并不一定是没有的。然而,在大多数情况下,这两种方法都可以工作。而且许多现有的测试都是断言真的,而不是断言没有。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-27 20:48:10

tldr;

虽然在您的特定情况下,两种技术的执行结果是相同的,但总体上存在功能上的差异。现在,这只取决于你是否愿意明确或简洁。

完整答案

假设a是Python语言中的一个变量,则存在以下区别:

代码语言:javascript
复制
assert a

代码语言:javascript
复制
assert a is not None

在第一个例子中,您正在计算对象上对 bool() buit- In 的调用的返回,它遵循多种策略来获得结果,因为它已经在here中讨论过了。

这只会根据对象的类实现进行计算。你看过你的response对象的类吗?它将告诉您bool(response)是如何运行的。

在第二种情况下,将a None.评估为不是这是完全不同的。例如,空list的计算结果为False,但不为None

代码语言:javascript
复制
>>> 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进行评估时的微小性能增益。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59067649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档