nose.tools.eq_ 对比 assertEqual
nose.tools.eq_ vs assertEqual
问题:
我们使用 nose
测试运行器已经有一段时间了。
有时,我看到我们的测试有 eq_()
个调用:
eq_(actual, expected)
而不是常见的:
self.assertEqual(actual, expected)
问题:
与标准单元测试框架的 assertEqual()
相比,使用 nose.tools.eq_
有什么好处吗?它们实际上是等价的吗?
想法:
好吧,一方面,eq_
更短,但它必须从 nose.tools
导入,这使得测试依赖于测试运行程序库,这使得切换到更难不同的测试运行器,比如 py.test
。另一方面,我们也经常使用 @istest
、@nottest
和 @attr
鼻子装饰器。
它们不等同于 unittest.TestCase.assertEqual
。
nose.tools.ok_(expr, msg=None)
Shorthand for assert
. Saves 3 whole characters!
nose.tools.eq_(a, b, msg=None)
Shorthand for assert a == b, "%r != %r" % (a, b)
https://nose.readthedocs.org/en/latest/testing_tools.html#nose.tools.ok_
然而,这些文档具有轻微的误导性。如果您检查源代码,您会看到 eq_
实际上是:
def eq_(a, b, msg=None):
if not a == b:
raise AssertionError(msg or "%r != %r" % (a, b))
https://github.com/nose-devs/nose/blob/master/nose/tools/trivial.py#L25
这非常接近 assertEqual
的基本情况:
def _baseAssertEqual(self, first, second, msg=None):
"""The default assertEqual implementation, not type specific."""
if not first == second:
standardMsg = '%s != %s' % _common_shorten_repr(first, second)
msg = self._formatMessage(msg, standardMsg)
raise self.failureException(msg) # default: AssertionError
然而,正如文档字符串和函数名称所暗示的那样,assertEqual
有可能成为 类型特定的 。这是您使用 eq_
(或 assert a == b
)失去的东西。 unittest.TestCase
有 dict
s、list
s、tuple
s、set
s、frozenset
s 和 str
s 的特殊情况.这些似乎主要有助于更漂亮地打印错误消息。
但是assertEqual
是TestCase
的class成员,所以只能在TestCase
中使用。 nose.tools.eq_
可以用在任何地方,就像一个简单的 assert
.
问题:
我们使用 nose
测试运行器已经有一段时间了。
有时,我看到我们的测试有 eq_()
个调用:
eq_(actual, expected)
而不是常见的:
self.assertEqual(actual, expected)
问题:
与标准单元测试框架的 assertEqual()
相比,使用 nose.tools.eq_
有什么好处吗?它们实际上是等价的吗?
想法:
好吧,一方面,eq_
更短,但它必须从 nose.tools
导入,这使得测试依赖于测试运行程序库,这使得切换到更难不同的测试运行器,比如 py.test
。另一方面,我们也经常使用 @istest
、@nottest
和 @attr
鼻子装饰器。
它们不等同于 unittest.TestCase.assertEqual
。
nose.tools.ok_(expr, msg=None)
Shorthand for
assert
. Saves 3 whole characters!
nose.tools.eq_(a, b, msg=None)
Shorthand for
assert a == b, "%r != %r" % (a, b)
https://nose.readthedocs.org/en/latest/testing_tools.html#nose.tools.ok_
然而,这些文档具有轻微的误导性。如果您检查源代码,您会看到 eq_
实际上是:
def eq_(a, b, msg=None):
if not a == b:
raise AssertionError(msg or "%r != %r" % (a, b))
https://github.com/nose-devs/nose/blob/master/nose/tools/trivial.py#L25
这非常接近 assertEqual
的基本情况:
def _baseAssertEqual(self, first, second, msg=None):
"""The default assertEqual implementation, not type specific."""
if not first == second:
standardMsg = '%s != %s' % _common_shorten_repr(first, second)
msg = self._formatMessage(msg, standardMsg)
raise self.failureException(msg) # default: AssertionError
然而,正如文档字符串和函数名称所暗示的那样,assertEqual
有可能成为 类型特定的 。这是您使用 eq_
(或 assert a == b
)失去的东西。 unittest.TestCase
有 dict
s、list
s、tuple
s、set
s、frozenset
s 和 str
s 的特殊情况.这些似乎主要有助于更漂亮地打印错误消息。
但是assertEqual
是TestCase
的class成员,所以只能在TestCase
中使用。 nose.tools.eq_
可以用在任何地方,就像一个简单的 assert
.