django测试观点与login_required装饰尊敬DRY

问题描述:

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

有没有比这更好的方法?

正如您所说,您可以将登录名移至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): 
     ... 
+0

我怎么可能错过这个......谢谢你再次打开我的眼睛。 – ProSinq