【发布时间】:2021-08-13 07:14:20
【问题描述】:
我正在尝试使用输入值创建一个单元测试。我知道 math.factorial 函数会给出正确的数字,所以我想将相同的值传递给我创建的阶乘函数和内置的 math.factorial 函数以比较结果并查看我的函数是否工作正常。
我不明白的是,即使我输入负值,下面的代码也以某种方式表示 RAN OK 为 0.000s。我相信在那种情况下它不应该工作。[有趣的事情有时它说对否定运行良好,有时则不是]
此外,如果我使用下面的第二个代码,当我输入负数时,它仍然会显示通过测试。即使我已经删除了第一个 IF 语句
我不清楚的第三件事是关于 TestCalc 类如何接受输入变量,即“n”。我认为我需要创建另一个参数,例如(self,number)。不知何故,它在 def_test_factorial(self) 中接受了 n
我是这个单元测试以及类和对象的新手。我希望有人能解开这些疑虑。
from functools import reduce
import doctest
import time
import math
import numpy as np
import unittest
def calculate_factorial(number):
if number < 0:
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
run = True
while run:
n = int(input('Enter an integer value: '))
if n != -9999:
unittest.main(argv=[''], verbosity=2, exit=False)
else:
run = False
class TestCalc(unittest.TestCase):
def test_factorial(self):
result = calculate_factorial(n)
self.assertEqual(result, math.factorial(n))
def test_n(self):
print(n)
第二个代码:
def calculate_factorial_(number):
if 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
我已经删除了负数条件,它仍然显示结果
run = True
while run:
n = int(input('Enter an integer value: '))
if n != -9999:
unittest.main(argv=[''], verbosity=2, exit=False)
else:
run = False
class TestCalc(unittest.TestCase):
def test_factorial(self):
result = calculate_factorial_(n)
self.assertEqual(result,math.factorial(n))
def test_n(self):
print(n)
【问题讨论】:
标签: python unit-testing input factorial