python assertequal_python – assertEqual – 两个相同的列表,为什么我得到奇怪的结果?...

我有单元测试:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值