Django Сравнение ожидаемого модульного теста с URL - PullRequest
1 голос
/ 14 февраля 2020
class TestsUrls(SimpleTestCase):

def test_index_url_is_resolved(self):
    url = reverse('index')
    self.assertEquals(resolve(url).func, index)

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

AssertionError: <function index at 0x11db7cb70> != <function index at 0x11d860ae8>

1 Ответ

1 голос
/ 14 февраля 2020

Непонятно, как вы получаете index, но resolve(url).func возвращает экземпляр python объекта , который является функцией. Все в python является объектами, а также функциями, поэтому вы получаете экземпляр в памяти. Когда вы сравниваете два объекта, вы сравниваете разные экземпляры одной и той же функции. Как вы можете видеть, их адреса в памяти различны.

Поэтому вместо непосредственного сравнения их сравните их имя и модуль:

f = resolve(url).func
self.assertEqual(f.__name__, index.__name__)
self.assertEqual(f.__module__, index.__module__)
...