2

我需要测试我的 python 代码是否有异常,但我似乎无法运行正确的语句。
当我测试我的生产代码时,我可以看到抛出了异常,但是当我在单元测试文件中测试这个异常时,我得到了这个:

testincorrectparam (unittestearnings.TestEarningsArgs)
should raise error when param not an integer ... "3v" is not a valid argument.  i should be an integer
ERROR

我通读了关于 SO 的类似问题,但我只是无法为我的问题找到令人满意的答案。

生产代码如下所示:

class Earnings():

    def printd(i=0):

        try:
            i = int(i)

        except Exception:
            print('"' + i + '"' + " is not a valid argument.  i should be an integer")
            sys.exit(0)

单元测试代码是这样的:

from earnings import Earnings
import unittest

class TestEarningsArgs(unittest.TestCase):

   def testincorrectparam(self):
      '''should raise error when param not an integer'''
      e = Earnings()
      value = "3v"
      self.assertRaises(Exception, e.printd(i=value))

if __name__ == "__main__":
      unittest.main()

非常感谢任何帮助。

4

3 回答 3

1

问题是异常被捕获,它没有传播到单元测试。您需要删除 try-except 语句并离开i = int(i)。在这种情况下,将引发异常并assertRaises自行捕获。

另一个问题是代码中的 sys.exit(0) 行。您需要用 raise Exception(...) 替换它,这不好,因为 Exception 类不是特定的异常(您应该针对您期望发生错误的情况引发更具体的异常)。

于 2012-08-10T13:58:29.607 回答
0

替换sys.exit(0)raise

于 2012-08-10T14:01:35.290 回答
0

我正在尝试在 python 中学习单元测试我认为 assertRaise 的一般形式是

TestCase.assertRaises(Exception, callable, parameter1,parameter2,...)

所以请尝试

self.assertRaises(Exception, e.printd,i=value)

希望它对你有用

于 2012-08-11T05:18:21.603 回答