我需要测试我的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()
非常感谢任何帮助。
答案 0 :(得分:1)
问题在于异常被捕获,它不会传播到unittest。您需要删除try-except语句并离开i = int(i)
。在这种情况下,将引发异常并且assertRaises
将自己捕获它。
另一个问题是代码中的sys.exit(0)行。您需要使用raise Exception(...)替换它,这是不好的,因为Exception类不是特定的异常(您应该针对您希望发生错误的情况引发更具体的异常)。
答案 1 :(得分:0)
将sys.exit(0)
替换为raise
答案 2 :(得分:0)
我正在尝试学习python中的单元测试我认为assertTrue的一般形式是
TestCase.assertRaises(Exception, callable, parameter1,parameter2,...)
所以请尝试
self.assertRaises(Exception, e.printd,i=value)
希望它适合你