Уведомления

Группа в Telegram: @pythonsu

#1 Июль 12, 2018 00:24:59

Levitanus
Зарегистрирован: 2018-05-01
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

unittest assertEqual не выкидывает фейл

такая буча у меня ,уже достала.

вот такой висит ассерт:

 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?

Офлайн

#2 Июль 12, 2018 01:20:45

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

unittest assertEqual не выкидывает фейл

Levitanus
Правда, тут есть важный момент: у класса объекта self.Int переопределен метод __eq__, который возвращает строку (механика такая у его применения).
Метод __eq__() должен возвращать True/False. Возвращение строки - неправильный подход.



Отредактировано py.user.next (Июль 12, 2018 01:21:43)

Офлайн

#3 Июль 12, 2018 01:29:16

Levitanus
Зарегистрирован: 2018-05-01
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

unittest assertEqual не выкидывает фейл

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 во всех случаях, кроме одного)

Отредактировано Levitanus (Июль 12, 2018 02:21:00)

Офлайн

#4 Июль 12, 2018 05:16:08

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

unittest assertEqual не выкидывает фейл

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

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



Отредактировано py.user.next (Июль 12, 2018 05:19:24)

Офлайн

#5 Июль 12, 2018 09:21:28

Levitanus
Зарегистрирован: 2018-05-01
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

unittest assertEqual не выкидывает фейл

py.user.next
Ты просто пытаешься надеть сапог на голову.
ну да. переделал

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version