0

如何检查自定义类数组是否按我想要的顺序排序?我知道在 Python 2.7 及更高版本中有 assertSequenceEqual,但我使用的是 Python 2.6,虽然我可以使用 forloop 来做到这一点......在 Python < 2.7 中有更好的东西我可以使用吗?

  actual_sorted = list.sort()

  expected_sorted = [MyClass("wed", 20), 
                     MyClass("wed", 19,),
                     MyClass("thu", 18,),
                     MyClass("wed", 17,)]

  self.assertEqual(actual_sorted, expected_sorted) # Well, this doesn't work.

先感谢您!

4

2 回答 2

1

正如 BrenBarn 所说,您必须添加一个__eq__方法。在看到他的答案之前,我正在并行编写一个完整的示例:

import unittest


class MyClass(object):
    def __init__(self, day_name, day_num):
        self.day_name = day_name
        self.day_num = day_num

    def __eq__(self, other):
        return other.day_name == self.day_name and other.day_num == self.day_num


class ATestCase(unittest.TestCase):
    def test_foo(self):
        actual_sorted = [MyClass("wed", 20),
                           MyClass("wed", 19),
                           MyClass("thu", 18),
                           MyClass("wed", 17)]

        expected_sorted = [MyClass("wed", 20),
                           MyClass("wed", 19),
                           MyClass("thu", 18),
                           MyClass("wed", 17)]
        self.assertEqual(actual_sorted, expected_sorted)


if __name__ == '__main__':
    unittest.main()
于 2012-08-28T19:27:14.140 回答
0
from operator import eq as equals
self.assertTrue(all(map(equals,actual_sorted, expected_sorted)))

这将逐个元素地测试相等性。当然,equals如果您不希望__eq__在相关类上定义 an,您可能需要自己定义(而且您可能不想这样做,因为定义 an__eq__可能会改变程序的行为以及单元测试)。

于 2012-08-28T19:24:27.913 回答