Django Test设置属性并以不同的方法访问它

时间:2016-12-29 20:46:58

标签: python django

我有一个看起来像这样的django测试:

class APITests(APITestCase):
    # APITestCase is a django rest framework wrapper for a regular django test
    def setUp(self):
        self.token = ""
        self.fixtures = ['tests/testdata.json']

    def test_client_register(self):
        ....
        self.token = response.json()["token"]
        # at this point, self.token is not ""

    def test_auth_token_verify(self):
        body = {
            "token": self.token  # <-- At this point, self.token is "", why??
        }
        response = self.client.post(reverse("misuper:api_token_verify"), body, format="json")

我该如何解决这个问题?我需要在测试类(&#34; token&#34;)上设置一个属性,该属性应填充一个测试,并可用于后续测试。

1 个答案:

答案 0 :(得分:1)

测试中的功能不按其显示的顺序执行。实际上,执行setUp(),然后执行一个测试用例,然后销毁该类。不要指望在测试之间保存状态。

测试应该是独立的单位。测试在执行之前不应依赖于其他测试。我可以列出两个原因:a)测试越来越难以维持更多依赖性b)并行运行测试变得非常困难。

如果在每次测试中都必须发生某些事情,我会将其拆分为单独的非测试方法,并从每次测试中调用它。

def setUp(self):
    self.token = ""
    self.fixtures = ['tests/testdata.json']

def updateToken(self, response):
    self.token = response.json()["token"]

def test_client_register(self):
    ....
    updateToken(self, response)

def test_auth_token_verify(self):
    updateToken(self, response)
    body = {
        "token": self.token  # <-- At this point, self.token is "", why??
    }
    response = self.client.post(reverse("misuper:api_token_verify"), body, format="json")