簡體   English   中英

因子單元測試 function 返回錯誤的測試運行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM