Cra*_*ett 8 python automated-tests
我正在与一位同事进行一些自动化测试,我们想知道我们的方法是否存在任何差异。
我们有一个返回 HTTP 响应对象的方法。有时,它可能返回 None,但通常是一个对象。
原代码是:
self.assertTrue(response)
Run Code Online (Sandbox Code Playgroud)
但我觉得它可能更具可读性:
assert response is not None
Run Code Online (Sandbox Code Playgroud)
我研究了关于真实性的文档中的差异,所以我知道会返回 true 的东西不一定是 None 。但是,在大多数情况下,两者都会起作用。并且许多现有的测试都断言为真,而不是断言没有。
为什么一种技术会比另一种更好?
Tim*_*Tim 14
通常存在功能差异,但在您的特定情况下,两种技术的执行结果将相同。现在这仅取决于您是否愿意明确或简洁。
假设这a
是Python中的一个变量,有以下区别:
assert a
Run Code Online (Sandbox Code Playgroud)
和
assert a is not None
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,您正在评估对对象的内置调用的返回bool()
,它遵循多种策略来获得结果,正如这里已经讨论过的。
这仅根据对象的类实现进行评估。你有没有看一下你的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
Run Code Online (Sandbox Code Playgroud)
如果您的响应对象是从 派生的子类list
,那么它的行为可能相同,因此评估 的空性response
并不等同于评估response
为None
。
在您的情况下,我猜您的response
对象是由request
库提供的。如果是这样,那么是的,在您的特定情况下,这两种技术在功能上是等效的,但您应该注意到对None
.
归档时间: |
|
查看次数: |
10982 次 |
最近记录: |