Есть ли способ создать addTypeEqualityFunc
, который может работать в двух разных классах? Например, если бы я хотел использовать тип объекта Earlier
, который вернул true, если это было раньше? Это было бы полезно при тестировании ответов для обновления modified_date
и тому подобного.
import datetime
from datetime import datetime as dt
import unittest
class Earlier:
def __init__(self, val):
self.val = val
def __eq__(self, other):
return self.val < other
def earlier1(earlier, timestamp):
assert earlier < timestamp
def earlier2(timestamp, earlier):
assert earlier < timestamp
class TestEarlierType(unittest.TestCase):
def setUp(self):
super(TestEarlierType, self).setUp()
self.e = Earlier(dt.utcnow())
self.addTypeEqualityFunc(Earlier, earlier1)
self.addTypeEqualityFunc(datetime.datetime, earlier2)
def test_assert_equal(self):
# success
self.assertEqual(self.e, dt.utcnow())
# success
self.assertSequenceEqual(
sorted([{'first': self.e, 'id': 2}, {'first': self.e, 'id': 1}], key=lambda x: x['id']),
sorted([{'first': dt.utcnow(), 'id': 1}, {'first': dt.utcnow(), 'id': 2}], key=lambda x: x['id'])
)
def test_assert_items_equal(self):
# this will fail
self.assertItemsEqual(
[{'first': self.e, 'id': 1}, {'first': self.e, 'id': 2}],
[{'first': dt.utcnow(), 'id': 1}, {'first': dt.utcnow(), 'id': 2}],
)
Я создал что-то подобное, и оно работает для регулярного сравнения, но если я хочу сравнить элементы как равные, мне нужно убедиться, что они отсортированы в первую очередь. Есть мысли?