Я пытаюсь проверить (используя unittest.TestCase), что возникает исключение ValueError, когда в метод депозита передается недопустимое значение, но при его возникновении тест не проходит. Я прошел тест в отладчике, и он дошел до строки raise ValueError, но тест по какой-то причине все равно не прошел. Я даже пробовал поднимать и утверждать с другими исключениями, но тест по-прежнему терпит неудачу.

Вот изображение отладки

Мой метод:

    def deposit(self, amount):
        if (not isinstance(amount, float)) and (not isinstance(amount, int)):
            raise ValueError

Мой тест:

    def test_illegal_deposit_raises_exception(self):
        self.assertRaises(ValueError, self.account.deposit("Money"))

Затем я подумал, что, возможно, это было не так, потому что исключение еще не было обнаружено. Поэтому я добавил в класс своего объекта метод для вызова метода deposit, улавливающего исключение ValueError.

    def aMethod(self):
        try:
            self.deposit("Money")
        except ValueError:
            print("ValueError was caught")

Однако теперь тест не удался, потому что вместо этого я получаю исключение TypeError. Вот другой образ отладки

TypeError: 'NoneType' object is not callable

Может ли кто-нибудь объяснить, почему я получаю исключение TypeError вместо исключения ValueError, которое я вызвал?

0
Samuel Browne 8 Дек 2020 в 15:48

1 ответ

Лучший ответ

Посмотрев на этот ответ Дэрила Спитцера, я смог заставить его работать. Поскольку методу deposit переданы аргументы, мне нужно указать их в утверждении, а не в методе.

Правильный способ проверки исключения возникает:

self.assertRaises(ValueError, self.account.deposit, "Money")

Неправильный путь:

self.assertRaises(ValueError, self.account.deposit("Money"))
0
Samuel Browne 9 Дек 2020 в 03:53