在计算输出时,如何在python中使用unittest来测试使用set.pop()的函数

时间:2019-02-18 12:17:12

标签: python python-3.x set python-unittest

我想测试一个在计算输出时使用set.pop()的函数。

我想按优先级弹出元素(例如:'a'将在'b'之前弹出),但仅在运行测试时才会显示。

我曾考虑过更改函数内部的pop方法(以弹出最小值),但这也会改变函数正常运行时的行为(不适用于单元测试)。

import unittest

def using_set(arr):
    res = []
    s = set(arr)
    while len(s):
        res.append(s.pop())

    return ','.join(res)


class Test(unittest.TestCase):
    def test_using_set(self):
        self.assertEqual('a,b,g', using_set(['b','a','g']))

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

1 个答案:

答案 0 :(得分:0)

更好的主意是编写确定性函数;在这种情况下,这意味着不仅要按s返回它们的顺序使用pop的元素,还要遍历其元素的排序序列。 (反复更改集合效率很低。)

def using_set(arr):
    res = []
    s = set(arr)
    for item in sorted(s):
        res.append(item)
    return ','.join(res)

如果您无法修改using_set,则需要以与想要 using_set返回的方式一致的方式操纵其返回值。

self.assertEqual(['a', 'b', 'g'], sorted(using_set(['b', 'a', 'g']).split(,)))

(如果您可以只指定未连接的期望值,则在排序后重新连接返回值元素是没有意义的。)