我有单元测试:
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: Lists differ: [] != [0, 1, 2, 3, 4]
Second list contains 5 additional elements. First extra element 0: 0
[]
[0, 1, 2, 3, 4]
你能解释一下,为什么TestSuccess成功运行,但TestFail没有?
解决方法:
您的insertion_sorting()函数具有破坏性:它会就您传递的列表进行就地修改.因此,在调用insertion_sorting()期间,确实会清除TestFail()中定义的数据变量引用的列表.
一个简单的解决方法是对列表的副本进行操作:
self.assertEqual(data, insertion_sorting(data[:]))
一个更复杂的选择是重构insert_sorting(),因此它不具有破坏性.
标签:python,unit-testing
来源: https://codeday.me/bug/20190629/1328822.html