django使用login_required decorator测试视图,尊重DRY

时间:2016-04-04 13:17:45

标签: django testing login-required

我有一个网站,所有视图都会被@login_required保护,当然除了登录视图。
但是,如果我没有向请求中添加身份验证的用户,则使用装饰器将导致我的测试调用这些视图失败。我知道这可以在setUp()中完成,但在任何测试类中编写相同的行都不符合DRY原则。

有没有比这更好的方法?

1 个答案:

答案 0 :(得分:5)

正如您所说,您可以将登录名移至setUp方法,以避免在测试类中的每个测试中出现重复。

如果您不喜欢在每个测试类中复制setUp方法,您可以创建自己的测试用例类或mixin。

class LoggedInTestCase(TestCase):

    def setUp(self):
        user = User.objects.create_user(username='username', password='password')
        self.client.login(username='username', password='password')

class MyTestCase(LoggedInTestCase):
    def test_stuff(self):
        ...

如果您覆盖子课程中的setUp方法,请记得致电super()

class MyOtherTestCase(LoggedInTestCase):
    def setUp(self):
        super(MyOtherTestCase, self).setUp()
        # other setUp code goes here

    def test_other_stuff(self):
        ...