【发布时间】:2021-08-16 10:01:37
【问题描述】:
我正在尝试使用下面的代码在值为负数时引发值错误。
添加了一个 raise 错误:number 应该大于 0 但是当我运行下面的代码时:
from functools import reduce
import math
import unittest
def calculate_factorial(number):
if number < 0:
print('about to throw value error')
raise ValueError('number should be greater than 0')
elif type(number) != int:
raise TypeError('number should be an integer type')
else:
data = []
for i in range(number):
data.append(number - i)
print(data)
results = reduce((lambda x, y: x * y), data, 1)
return results
class TestCalc(unittest.TestCase):
def test_factorial(self):
print('Function is starting to check for values')
print()
result = calculate_factorial(n)
print('results are:',result)
print()
self.assertEqual(result,math.factorial(n))
def test_n(self):
print('The value of n taken by the class function is:',n)
run = True
while run:
n = int(input('Enter an integer value: '))
if n != -9999:
unittest.main(argv=[''], verbosity=2, exit=False)
else:
run = False
我收到如下错误。我可以在下面看到我的 raise 值正在通过,但不知何故测试类没有考虑它。
test_factorial (__main__.TestCalc) ... ERROR
test_n (__main__.TestCalc) ... ok
======================================================================
ERROR: test_factorial (__main__.TestCalc)
----------------------------------------------------------------------
Traceback (most recent call last):
File "<ipython-input-3-d89c3d44c70d>", line 5, in test_factorial
result = calculate_factorial(n)
File "<ipython-input-2-2ad930b1e911>", line 5, in calculate_factorial
raise ValueError('number should be greater than 0')
ValueError: number should be greater than 0
----------------------------------------------------------------------
Ran 2 tests in 0.010s
FAILED (errors=1)
【问题讨论】:
-
你能解释一下你的期望吗?测试
test_factorial失败,如果由于引发ValueError而出现负数。 -
@SvenEberth 我希望测试能够通过,因为如果数字为负数,我会提高值错误,但正如您从上面看到的那样,在这种情况下测试失败,即使我可以看到我的加薪值错误值
-
这不是单元测试的工作方式。对于测试用例,这里的异常是意外的。但是您可以添加
if number < 0和assertRaises(ValueError)来正确处理这种情况。 -
如果我正确理解您的需求,我相信您需要在输入为负数时使用 assertRaises。查看这个问题的答案:stackoverflow.com/questions/129507/…
-
@SvenEberth 你的意思是我应该在我的第一个 if 语句下添加 assert_raises(ValueError) 吗?如果你可以分享代码,它没有工作是可能的
标签: python unit-testing raiserror