【问题标题】:Factorial Unit Test function returning wrong test runs阶乘单元测试函数返回错误的测试运行
【发布时间】: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


    【解决方案1】:

    我通过在 while 循环之前移动类函数来解决上述问题。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 2021-02-10
      相关资源
      最近更新 更多