我想测试一个在计算输出时使用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()
答案 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(,)))
(如果您可以只指定未连接的期望值,则在排序后重新连接返回值元素是没有意义的。)