我有以下Django单元测试:
def test_highscores_no_n_success_(self):
"""Checks that top 10 highscores of an owner are returned,
if no number of highscores is specified in the request"""
high_score = 100
for users in range(15):
user = create_user(1, 1, "aguha")
user.high_score = high_score
user.save()
high_score +=10
response = self.client.get('/api/highscores/',
{'token': 1, 'key': 1})
self.assertContains(response,
"\"id\": 10, \"high_score\": 180")
对于以下功能:
def highscores(request):
"""Returns the top n (or 10) high scores for an owner"""
r = request.GET
token = r['token']
owner = Owner.objects.get(api_token=token)
try:
n = r['n']
except KeyError:
user_count = User.objects.filter(owner=owner).count()
if user_count >= 10:
n = 10
else:
n = user_count
top_scorers = User.objects.filter(owner=owner).order_by('-high_score').values('id', 'high_score')[:n]
top_scorers_json = json.dumps(list(top_scorers))
return HttpResponse(top_scorers_json,
content_type="application/json")
这是create_user
函数:
def create_user(token, key, owner_username):
"""Creates a user object for the purpose of testing"""
try:
owner = Owner.objects.get(api_token=token)
except ObjectDoesNotExist:
owner = Owner.objects.create(api_token=token, api_key=key,
username=owner_username)
return User.objects.create(owner=owner)
奇怪的是,这个测试有时成功,有时失败。失败时,它表示无法在响应中找到^{{cd2>}。这怎么可能?每个新测试都会重置数据库,测试完成后将被擦除,因此这不应该是一个问题。有什么问题吗?你知道吗
我最初的假设是,这可能与运行测试之间的时间有关。但这似乎没有效果。我可以一个接一个地运行几次,它就会正常工作。然后我回来,运行了很多分钟后,它失败了。我的功能或测试有问题吗?你知道吗
我明白了为什么我会出错。在返回的列表中,有时
id
出现在high_score
之前,即我得到了"id": 10, "high_score": 180
,这就是测试正常运行的原因。但在其他时间high_score
出现在id
之前,即"high_score": 180, "id": 10
,这就是测试失败的原因。你知道吗相关问题 更多 >
编程相关推荐