在django中设置拆卸登录注销的正确方法

时间:2014-05-17 05:07:27

标签: python django testing

为了测试我使用django制作的轮询应用程序,投票/ viewing_results的先决条件是用户应该登录。我想创建一个测试套件,其中安装涉及创建testuser,登录并拆除涉及日志记录超出用户并删除用户。

我遇到了setUp()和tearDown()方法 - 但是我们知道它们已经完成了测试中的每个方法。我希望在类级别具有此功能,并且看到django具有setUpClass和tearDownClass - 但由于它们是类方法,因此我无法对它们执行self.client.login,self.client.logout。然后我创建了一个具有setUp和tearDown方法的LoginMixin。

我想知道这两种方法中哪一种更加pythonic并且有更好的选择而不是在每次测试之前登录和退出?

  1. 有setUp,tearDown方法:

    def setUp(self):
        self.user = utils.create_user()
        self.client.login(username='testuser', password='testpasswd')
    
    def tearDown(self):
        self.client.logout()
        utils.delete_user(self.user)
    
  2. 拥有LoginMixin并让每个测试类派生自它:

    class LoginMixin():
    
      def setUp(self):
        self.user = create_user()
        self.client.login(username='testuser', password='testpasswd')
    
      def tearDown(self):
        self.client.logout()
    
    class MyTest(LoginMixin, TestCase):
       ....
       ....
    
  3. 我使用django_nose作为TestRunner。

1 个答案:

答案 0 :(得分:0)

如果您未使用setUpClass课程方法的唯一原因是您无法访问默认客户端,则可以创建自己的并参考:

from django.test.client import Client

class LoginMixin():
    client = Client()
    # ...