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____eq__

于 2012-08-28T19:24:27.913 に答える