Ответ 1
Они не эквивалентны unittest.TestCase.assertEqual
.
nose.tools.ok_ (expr, msg = None)
Сокращение для assert. Сохраняет 3 целых символа!
nose.tools.eq_ (a, b, msg = None)
Сокращенное выражение для '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
Однако, как намечено имя docstring и функции, assertEqual
имеет потенциал специфичного для типа. Это то, что вы теряете с помощью eq_
(или assert a == b
, если на то пошло). unittest.TestCase
имеет специальные случаи для dict
s, list
s, tuple
s, set
s, frozenset
и str
s. В основном это облегчает более красивую печать сообщений об ошибках.
Но assertEqual
является членом класса TestCase
, поэтому его можно использовать только в TestCase
s. nose.tools.eq_
может использоваться везде, как простой assert
.