【问题标题】:Python - Returning Exception in unittestPython - 在单元测试中返回异常
【发布时间】:2018-09-13 16:18:05
【问题描述】:

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

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

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 类中引发异常(有两个不同的文件)。

如果我用self.assertRaises(ValueError):(BowlingGameTest 类)做return ValueError(BowlingGame 类)我得到AssertionError: ValueError not raised

有什么想法吗?

【问题讨论】:

    标签: python unit-testing tdd


    【解决方案1】:

    你需要raiseValueError而不是returning它,即,

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

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

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

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

    【讨论】:

      【解决方案2】:

      类似这样的..

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-23
        • 2012-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-30
        相关资源
        最近更新 更多