首页 > 解决方案 > Unittest:新数字对的新测试用例

问题描述

我从 [https://www.codewars.com/kata/59ccf051dcc4050f7800008f/python][1] 解决了一项任务

这是我的代码:

import math
def buddy(start, limit):
    for n in range(start, limit + 1):
        m = s(n)
        if m > n and n == s(m):
            return [n, m]

    return None

def s(n):
    s = 0
    for i in range(2, round(n ** 0.5)):
        if n % i == 0:
            s += i
            s += n // i

    return s

对于 buddy(48, 50)),输出为:[48, 75]

对于 buddy(2177, 4357)),输出为:无

现在我想为我的代码编写一个单元测试。

这是我的示例:

import unittest
from buddy_pair import buddy

class MyTestCase(unittest.TestCase):
    def test_buddy_pair(self):
        pair = buddy(48, 50)
        self.assertEqual(pair, [48, 75])

    def test_buddy_None(self):
        pair = buddy(2177, 4357)
        self.assertEqual(pair, None)



if __name__ == '__main__':
    unittest.main()

现在我有一个问题。我是否进行了正确的测试,我是否应该总是为新的配对号码测试编写一个新函数?如果您也建议进行一些测试重构,也将不胜感激。

标签: pythonpython-unittest

解决方案


我认为您应该单独编写它们,因为您可以根据需要单独运行或完全运行。

如果您将它们写在一个函数中,那么当您只想测试其中一个结果时,您将不得不调整代码。代码中有 1 个错误。

应该

    def test_buddy_pair(self):
        pair = buddy(48, 50)
        self.assertEqual([48, 75], pair)

期望应该是第一个参数。


推荐阅读