为什么这个Django测试用例不能通过?

2024-05-15 22:15:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为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)

当我运行这个测试时,返回值USER_DELETED是正确的,但是用户对象实际上没有被删除

self.setup()返回一个创建的用户。如果需要,我可以发布它,但是安装和拆卸都可以与UserTest类中的各种其他测试一起工作

以下是正在测试的模型方法:

@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

有人能解释一下我做错了什么吗

谢谢


Tags: to方法no用户模型selfidreturn
1条回答
网友
1楼 · 发布于 2024-05-15 22:15:06

我认为您可以使用Asserraies来测试删除功能。正如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()

相关问题 更多 >