Django url 预期视图函数的单元测试比较失败
Django url unit test comparison of expected view function fails
class TestsUrls(SimpleTestCase):
def test_index_url_is_resolved(self):
url = reverse('index')
self.assertEquals(resolve(url).func, index)
我正在尝试进行单元测试 url 以查看它是否 returns 预期的视图。即使看起来功能相同,此断言也会失败。我使用的是基于函数的视图,而不是基于 class 的视图。跟这个有关系吗?
AssertionError: <function index at 0x11db7cb70> != <function index at 0x11d860ae8>
不清楚如何获得 index
,但是 resolve(url).func
returns python object 的实例功能。 python中的所有东西都是对象,也是函数,所以你在内存中得到一个实例。当您比较这两个对象时,您是在比较同一函数的不同 实例 。正如你所看到的,它们在内存中的地址是不同的。
所以不是直接比较它们,而是比较它们的名称和模块:
f = resolve(url).func
self.assertEqual(f.__name__, index.__name__)
self.assertEqual(f.__module__, index.__module__)
class TestsUrls(SimpleTestCase):
def test_index_url_is_resolved(self):
url = reverse('index')
self.assertEquals(resolve(url).func, index)
我正在尝试进行单元测试 url 以查看它是否 returns 预期的视图。即使看起来功能相同,此断言也会失败。我使用的是基于函数的视图,而不是基于 class 的视图。跟这个有关系吗?
AssertionError: <function index at 0x11db7cb70> != <function index at 0x11d860ae8>
不清楚如何获得 index
,但是 resolve(url).func
returns python object 的实例功能。 python中的所有东西都是对象,也是函数,所以你在内存中得到一个实例。当您比较这两个对象时,您是在比较同一函数的不同 实例 。正如你所看到的,它们在内存中的地址是不同的。
所以不是直接比较它们,而是比较它们的名称和模块:
f = resolve(url).func
self.assertEqual(f.__name__, index.__name__)
self.assertEqual(f.__module__, index.__module__)