我有一个看起来像这样的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;)上设置一个属性,该属性应填充一个测试,并可用于后续测试。
答案 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")