Python - 在单元测试中返回异常

Python - Returning Exception in unittest

我开始学习 TDD 并将保龄球游戏型作为练习。 我已经完成了一些常规分数测试,但我想添加更多只是为了练习,一个想法是如果我掷出负数则引发异常。

孔代码不相关,因为这是一个简单的验证

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

问题是如果我 return 例如 0/0 在 BowlingGame class 而不是 BowlingGameTest class 中引发异常(有两个不同的文件).

如果我 return ValueError (BowlingGame Class) 和 self.assertRaises(ValueError): (BowlingGameTest Class) 我得到 AssertionError: ValueError not raised

有什么想法吗?

像这样..

try:
    self.game.roll(-1)
except ValueError:
    pass

您需要 raise ValueError 而不是 returning 它,即

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

返回一个异常实际上returnsclass对象,但是如果你引发一个异常,它会抛出你想要的错误。

听起来您使用的 self.assertRaises 是正确的 - 不过以防万一 - 它应该看起来像这样:

def test_roll_negative(self):
    with self.assertRaises(ValueError):
        self.game.roll(-1)