2024-06-17 23:19:23 发布
网友
我正在和一位同事进行一些自动化测试,我们想知道我们的方法是否有任何不同。在
我们有一个返回HTTP响应对象的方法。有时,它可能不返回任何值,但通常返回一个对象。在
原始代码是:
self.assertTrue(response)
但我觉得这样更有可读性:
我研究了关于真理的文献中的不同之处,所以我意识到有些事情是真的,但并不一定没有。然而,在大多数情况下,两者都会奏效。很多现有的测试都是断言true,而不是断言not none。在
有什么理由说明一种技术比另一种更有效?在
虽然在您的特定情况下,这两种技术的执行结果将是相同的,但一般来说,这两种技术在功能上是不同的。现在这只取决于你是否愿意明确或简洁。在
假设a是Python中的一个变量,这两个变量之间有一个区别:
a
assert a
以及
在第一种情况下,您正在计算对对象上的bool()内置调用的返回,它遵循多种策略来获得结果,正如已经讨论的here。在
bool()
根据对象的类实现,它只对求值。你看过你的response对象的类了吗?它将告诉您bool(response)的行为。在
response
bool(response)
在第二种情况下,您正在评估a不是None。这完全不同。例如,空的list将计算为False,但不是{}:
None
list
False
>>> 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计算的性能增益很小。在
request
tldr
虽然在您的特定情况下,这两种技术的执行结果将是相同的,但一般来说,这两种技术在功能上是不同的。现在这只取决于你是否愿意明确或简洁。在
完整答案
假设
a
是Python中的一个变量,这两个变量之间有一个区别:以及
^{pr2}$在第一种情况下,您正在计算对对象上的
bool()
内置调用的返回,它遵循多种策略来获得结果,正如已经讨论的here。在根据对象的类实现,它只对求值。你看过你的
response
对象的类了吗?它将告诉您bool(response)
的行为。在在第二种情况下,您正在评估}:
a
不是None
。这完全不同。例如,空的list
将计算为False
,但不是{如果响应对象是从
list
派生的子类,那么它的行为方式可能相同,因此计算response
的空性并不等同于将response
计算为None
。在在您的例子中,我想您的
response
对象是由request
库提供的。如果是这样的话,那么是的,在您的特定情况下,这两种技术在功能上是等价的,不过您应该注意到针对None
计算的性能增益很小。在相关问题 更多 >
编程相关推荐