Найти - Пользователи
Полная версия: unittest assertEqual не выкидывает фейл
Начало » Python для новичков » unittest assertEqual не выкидывает фейл
1
Levitanus
такая буча у меня ,уже достала.

вот такой висит ассерт:
 x = FrameVar('x', self.Int)
self.assertEqual(x(), self.Int())
print(x(), self.Int())
вот вывод от него:
<native_types.kInt object at 0x000001AE1FC66A90> $int
Ошибка не поднимается. Поймал в этот раз на этапе тестирования класа-компоновщика. И то не в лоб, а также через принт.

Правда, тут есть важный момент: у класса объекта self.Int переопределен метод __eq__, который возвращает строку (механика такая у его применения). То есть, он, получается, у меня в таком случае всегда True? Как с этим лучше бороться? Возвращать False в случае неравенства я не могу, мне там правда нужна строка, но и в тестах такую очевидную дичь пропускать устал…
Написать свой собственный ассерт с блекджеком и шлюхами?) Или подойдет assertIs?
py.user.next
Levitanus
Правда, тут есть важный момент: у класса объекта self.Int переопределен метод __eq__, который возвращает строку (механика такая у его применения).
Метод __eq__() должен возвращать True/False. Возвращение строки - неправильный подход.
Levitanus
py.user.next
Метод __eq__() должен возвращать True/False
вроде бы да, но в этом случае механика работы класса заметно усложнится…
В принципе, почему бы и не что-нибудь в этом роде?

 import unittest as t
class MyOwnTestCase(t.TestCase):
    def assertEqual(self, a, b):
        if isinstance(a == b, bool):
            return super().assertEqual(a, b)
        if callable(a):
            a = a()
        if callable(b):
            b = (b)
        return super().assertEqual(a, b)

P.S. ой, не. туплю я на ночь глядя…

Вообще он возвращает bool во всех случаях, кроме одного)
py.user.next
Levitanus
вроде бы да, но в этом случае механика работы класса заметно усложнится…
Ты его неправильно спроектировал, из-за этого имеешь теперь кучу проблем. Учись проектировать, тесты просто выявили твою ошибку.

Levitanus
В принципе, почему бы и не что-нибудь в этом роде?
Ты просто пытаешься надеть сапог на голову.
Получится у тебя или не получится, какая разница?

Levitanus
py.user.next
Ты просто пытаешься надеть сапог на голову.
ну да. переделал
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB