首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么unittest不认为这两个列表是相等的?

为什么unittest不认为这两个列表是相等的?
EN

Stack Overflow用户
提问于 2018-08-18 22:39:39
回答 2查看 67关注 0票数 0

所以我只是为了练习而实现了一些经典的排序算法,并提出了这个合并排序的解决方案:

代码语言:javascript
复制
def merge_sort(numbers):
'''Sorts a list based on the traditional merge-sort'''

    if len(numbers) <= 1:
        return numbers

    result = []

    mid = len(numbers) // 2

    left = merge_sort(numbers[mid:])
    right = merge_sort(numbers[:mid])

    l_idx = 0
    r_idx = 0

    # compare all numbers in the two lists
    while l_idx < len(left) and r_idx < len(right):
        if left[l_idx] > right[r_idx]:
            result.append(right[r_idx])
            r_idx += 1
        else:
            result.append(left[l_idx])
            l_idx += 1

    # make sure leftover numbers are added to result
    result += left[l_idx:]
    result += right[r_idx:]

    return result

它似乎起作用了,例如:

代码语言:javascript
复制
>> number_list = [1, 3, 7, 8, 12, 23, 41, 3, 7, 12, 41, 24, 29]
>> sorted(number_list)
[1, 3, 3, 7, 7, 8, 12, 12, 23, 24, 29, 41, 41]
>> merge_sort(number_list)
[1, 3, 3, 7, 7, 8, 12, 12, 23, 24, 29, 41, 41]

输出是正确的,并且排序正确,但是当我运行单元测试时,它看起来像这样:

代码语言:javascript
复制
import sorting as s
import unittest
import random
unsorted_list = [random.randint(1, 120) for _ in range(100)]
expected_sorted_list = sorted(unsorted_list)

    def test_mergesort(self):

        merge_sorted_list = s.merge_sort(unsorted_list)
        self.assertEqual(expected_sorted_list, merge_sorted_list)

当我运行的时候:

代码语言:javascript
复制
>> python -m unittest test_sorting
AssertionError: Lists differ: [4, 4[42 chars]2, 13, 14, 15, 15, 16, 17, 18, 19, 20, 21, 22,[308 chars] 120] != [4, 4[42 chars]2, 13]

First list contains 84 additional elements.
First extra element 16:
14

Diff is 762 characters long. Set self.maxDiff to None to see it.

----------------------------------------------------------------------
Ran 2 tests in 0.002s

FAILED (failures=1)

为什么我的单元测试会抛出错误?尽管我已经测试了合并排序功能,它似乎可以正确排序。

目录结构:

代码语言:javascript
复制
/classical-algorithms
    sorting.py
    test_sorting.py
EN

回答 2

Stack Overflow用户

发布于 2018-08-18 22:51:22

让包含测试的python文件成为test_sorting.py

那么下面的方法对我来说是有效的:

代码语言:javascript
复制
import sorting as s
import unittest
import random
unsorted_list = [random.randint(1, 120) for _ in range(100)]
expected_sorted_list = sorted(unsorted_list)

class tests(unittest.TestCase):
    def test_mergesort(self):
        merge_sorted_list = s.merge_sort(unsorted_list)
        self.assertEqual(expected_sorted_list, merge_sorted_list)

运行测试:

代码语言:javascript
复制
$python -m unittest test_sorting
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
票数 0
EN

Stack Overflow用户

发布于 2018-08-18 23:49:13

我似乎发现了错误。我的旧单元测试文件如下所示:

代码语言:javascript
复制
import sorting as s
import unittest
import random

unsorted_list = [random.randint(1, 120) for _ in range(100)]
expected_sorted_list = sorted(unsorted_list)

    def test_bubblesort(self):

        bubble_sorted_list = s.bubble_sort(unsorted_list)
        self.assertEqual(expected_sorted_list, bubble_sorted_list)

    def test_mergesort(self):

        merge_sorted_list = s.merge_sort(unsorted_list)
        self.assertEqual(expected_sorted_list, merge_sorted_list)

我也在测试我之前实现的bubble_sort。当我将其更改为:

代码语言:javascript
复制
import sorting as s
import unittest
import random


class TestSorters(unittest.TestCase):

    def test_bubblesort(self):

        unsorted_list = [random.randint(1, 120) for _ in range(100)]
        expected_sorted_list = sorted(unsorted_list)
        bubble_sorted_list = s.bubble_sort(unsorted_list)
        self.assertEqual(expected_sorted_list, bubble_sorted_list)

    def test_mergesort(self):

        unsorted_list = [random.randint(1, 120) for _ in range(100)]
        expected_sorted_list = sorted(unsorted_list)
        merge_sorted_list = s.merge_sort(unsorted_list)
        self.assertEqual(expected_sorted_list, merge_sorted_list)

一切正常。是不是很奇怪?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51909747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档