我有单元测试:
import unittest
class TestFail(unittest.TestCase):
def testFail(self):
data = range(5)
self.assertEqual(data, insertion_sorting(data))
class TestSuccess(unittest.TestCase):
def testSuccess(self):
data = range(5)
self.assertEqual([0,1,2,3,4], insertion_sorting(data))
def insertion_sorting(data):
result = []
while len(data):
min_index = 0
for i in range(len(data)):
if data[i] < data[min_index]: min_index = i
result.append(data[min_index])
del data[min_index]
return result
if __name__ == '__main__':
unittest.main()
TestSuccess运行成功,但TestFail提出:
AssertionError:列表不同:[]!= [0,1,2,3,4]
第二个列表包含5个附加元素。第一个额外元素0:0
- []
- [0,1,2,3,4]
你能解释一下,为什么TestSuccess成功运行,但TestFail没有?
答案 0 :(得分:2)
您的insertion_sorting()
功能破坏性:它会就您传递的列表就地修改。因此,在调用data
期间,TestFail()
中定义的insertion_sorting()
变量引用的列表确实会被清除。
一个简单的解决方法是对列表的副本进行操作:
self.assertEqual(data, insertion_sorting(data[:]))
更复杂的选择是重构insertion_sorting()
,因此它不具有破坏性。
答案 1 :(得分:1)
尝试以下方法:
data = range(5)
print data
print insertion_sorting(data)
print data
你看到会发生什么吗?您删除data
。
要回答您的真实问题 - TestFail
失败,因为data
在排序后为空,而在TestSuccess
中则会检查其他列表。