为什么这个 Django TestCase 测试不通过?
Why won't this Django TestCase test pass?
我正在尝试为 API 编写测试。我在使用几个用户模型方法时遇到了问题。这些方法在开发和生产环境中都有效,但测试无效。
这是测试:
def test_delete_user(self):
USER_DELETED = 1
self.u = self.setup()
result = User.delete_user(self.u, self.u.pk)
# response
self.assertEqual(result, USER_DELETED)
# functionality
self.assertIsNone(self.u)
print(self.u)
我运行这个测试的时候,return值USER_DELETED
是正确的,但是用户对象并没有真正删除。
self.setup()
returns 一个创建的用户。如果需要,我可以 post 这个,但是设置和拆卸都可以与 UserTest class.
中的各种其他测试一起使用
下面是正在测试的模型方法:
@staticmethod
def delete_user(requesting_user, user_id):
# static variables
USER_DELETED = 1
NOT_AUTHORIZED = 0
NO_USER = -1
user_to_be_deleted = User.get_user_from_user_id(user_id)
if user_to_be_deleted == NO_USER:
return NO_USER
# check for authorization to delete
if requesting_user != user_to_be_deleted:
return NOT_AUTHORIZED
user_to_be_deleted.delete()
return USER_DELETED
我还尝试使用设置创建用户,然后调用 self.u.delete()
而不是我拥有的自定义方法。这给出了相同的结果:AssertionError: <User: test_user> is not None
谁能解释一下我做错了什么?
谢谢。
我认为您可以使用 asserRaises 来测试删除功能。正如 Thomas 提到的那样,您应该 self.u.refresh_from_db
,但这会引发 DoesNotExists
,因为对象已被删除,因此正确的测试方法如下。
def test_delete_user(self):
USER_DELETED = 1
self.u = self.setup()
result = User.delete_user(self.u, self.u.pk)
# response
self.assertEqual(result, USER_DELETED)
# functionality
with self.assertRaises(User.DoesNotExist):
self.u.refresh_from_db()
我正在尝试为 API 编写测试。我在使用几个用户模型方法时遇到了问题。这些方法在开发和生产环境中都有效,但测试无效。
这是测试:
def test_delete_user(self):
USER_DELETED = 1
self.u = self.setup()
result = User.delete_user(self.u, self.u.pk)
# response
self.assertEqual(result, USER_DELETED)
# functionality
self.assertIsNone(self.u)
print(self.u)
我运行这个测试的时候,return值USER_DELETED
是正确的,但是用户对象并没有真正删除。
self.setup()
returns 一个创建的用户。如果需要,我可以 post 这个,但是设置和拆卸都可以与 UserTest class.
下面是正在测试的模型方法:
@staticmethod
def delete_user(requesting_user, user_id):
# static variables
USER_DELETED = 1
NOT_AUTHORIZED = 0
NO_USER = -1
user_to_be_deleted = User.get_user_from_user_id(user_id)
if user_to_be_deleted == NO_USER:
return NO_USER
# check for authorization to delete
if requesting_user != user_to_be_deleted:
return NOT_AUTHORIZED
user_to_be_deleted.delete()
return USER_DELETED
我还尝试使用设置创建用户,然后调用 self.u.delete()
而不是我拥有的自定义方法。这给出了相同的结果:AssertionError: <User: test_user> is not None
谁能解释一下我做错了什么?
谢谢。
我认为您可以使用 asserRaises 来测试删除功能。正如 Thomas 提到的那样,您应该 self.u.refresh_from_db
,但这会引发 DoesNotExists
,因为对象已被删除,因此正确的测试方法如下。
def test_delete_user(self):
USER_DELETED = 1
self.u = self.setup()
result = User.delete_user(self.u, self.u.pk)
# response
self.assertEqual(result, USER_DELETED)
# functionality
with self.assertRaises(User.DoesNotExist):
self.u.refresh_from_db()