[英]Factorial Unit Test function returning wrong test runs
我正在嘗試使用輸入值創建單元測試。 我知道 math.factorial function 會給出正確的數字,所以我想將相同的值傳遞給我創建的階乘 function 和內置的 math.factorial function 來比較結果,看看我的 function 是否工作正常。
我不明白的是,即使我輸入負值,下面的代碼也會以某種方式說 RAN OK 是 0.000s。 我相信在那種情況下它不應該工作。[有趣的是有時它說運行正常但有時不運行]
此外,如果我使用下面的第二個代碼,當我輸入負數時,它仍然會說通過測試。 即使我刪除了第一個 IF 語句
我不清楚的第三件事是 class 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)
我通過在 while 循環之前移動 class function 解決了上述問題。
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
class TestCalc(unittest.TestCase):
def test_factorial(self):
result = calculate_factorial_(n)
self.assertEqual(result,math.factorial(n))
def test_n(self):
print(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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.