4

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

还有比这更好的方法吗?

4

1 回答 1

6

正如您所说,您可以将登录名移至该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):
        ...
于 2016-04-04T14:07:53.240 回答