Регистрация и область применения юнит-теста addTypeEqualityFun c () - PullRequest
1 голос
/ 08 февраля 2020
Фреймворк

Python unittest определяет метод addTypeEqualityFunc, который "регистрирует метод с указанием типа c, вызываемый assertEqual (), чтобы проверить, являются ли два объекта абсолютно одинаковыми typeobj (не подклассы) сравнивают равные. "

Каковы рамки механизма этой регистрации? Документация также не обсуждается, и «python регистрация» устойчива к поиску.

В основном мне любопытно, является ли эта «регистрация» каким-либо назначением в локальной области, или если Python имеет более широкую концепцию регистрации, которую я не смог найти в документах.

1 Ответ

1 голос
/ 08 февраля 2020

Применяется только к текущему тесту . Python unittest не имеет более широкого понятия «регистрация» в этом случае. Оба приведенных ниже теста пройдут:

# run these tests with "python -m unittest" in same directory as this file.

from unittest import TestCase

class Potato:
    pass

def potato_compare(potato1, potato2, msg=None):
    return True

class Test1(TestCase):

    def test_one(self):
        spud = Potato()
        yam = Potato()
        self.addTypeEqualityFunc(Potato, potato_compare)
        self.assertEqual(spud, yam)

    def test_two(self):
        spud = Potato()
        yam = Potato()
        self.assertNotEqual(spud, yam)

Если вы хотите применить его к каждому тесту, вы можете добавить его к setUp:

class Test2(TestCase):

    def setUp(self):
        self.addTypeEqualityFunc(Potato, potato_compare)

    def test_one(self):
        spud = Potato()
        yam = Potato()
        self.assertEqual(spud, yam)

    def test_two(self):
        spud = Potato()
        yam = Potato()
        self.assertEqual(spud, yam)

Предупреждение: Эта функциональность не возвращается в контейнеры . Например, [spud] и [yam] не будут распознаны как равные списки.

...