Тестирование юнитов и предоставление класса, который оценивается как true, когда в другое время позже - PullRequest
0 голосов
/ 05 сентября 2018

Есть ли способ создать 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}],
        )

Я создал что-то подобное, и оно работает для регулярного сравнения, но если я хочу сравнить элементы как равные, мне нужно убедиться, что они отсортированы в первую очередь. Есть мысли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...