Python - возвращение исключения в unittest - PullRequest
0 голосов
/ 13 сентября 2018

Я начал изучать TDD и получил ката Bowling Game в качестве упражнения.Я закончил некоторые обычные тесты, но я хочу добавить больше, чтобы попрактиковаться, и одна идея состояла в том, чтобы вызвать исключение, если я выброшу отрицательное число.

Код дыры не имеет значения, потому что этопростая проверка

class BowlingGame(object):
    def __init__(self):
        pass
    def roll(self, pins):
        if pins < 0:
            #Want to Return Value Exception

class BowlingGameTest(unittest.TestCase):
    def setUp(self):
        self._game = BowlingGame()
    def test_roll_negative(self):
        self.game.roll(-1)
        #Want to catch exception here with self.assert or except

Проблема заключается в том, что если я верну, например, 0/0, то исключение возникает в классе BowlingGame, а не в классе BowlingGameTest (есть в двух разных файлах).

Если я сделаю return ValueError (класс BowlingGame) с self.assertRaises(ValueError): (класс BowlingGameTest), я получу AssertionError: ValueError not raised

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Вам нужно raise ValueError вместо return, то есть

def roll(self, pins):
    if pins < 0:
        raise ValueError

Возвращая , исключение фактически возвращает объект класса, но если вы повышение исключение, оно выдаст ошибку, как вы хотите.

Похоже, вы правильно используете self.assertRaises - на всякий случай, хотя - должно выглядеть так:

def test_roll_negative(self):
    with self.assertRaises(ValueError):
        self.game.roll(-1)
0 голосов
/ 13 сентября 2018

как то так ..

try:
    self.game.roll(-1)
except ValueError:
    pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...