首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同样的Django单元测试有时失败,有时成功

同样的Django单元测试有时失败,有时成功
EN

Stack Overflow用户
提问于 2014-06-10 23:32:07
回答 1查看 157关注 0票数 0

我有以下Django单元测试:

代码语言:javascript
复制
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")

对于以下函数:

代码语言:javascript
复制
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函数:

代码语言:javascript
复制
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)

奇怪的是,这个测试有时成功,有时失败。如果失败,它会说在响应中找不到"id": 10, "high_score": 180。这怎麽可能?每次新的测试都会重置数据库,并在测试完成后擦除数据库,所以这应该不是问题。这里有什么问题?

我最初的假设是,这可能与运行测试之间的时间有关。但这似乎没有什么效果。我可以一个接一个地运行它几次,它就能正常工作。然后我回来并在几分钟后运行,它失败了。是我的函数有问题还是我的测试有问题?

EN

回答 1

Stack Overflow用户

发布于 2014-06-11 02:50:41

我弄明白了为什么我会得到这个错误。在返回的列表中,有时id出现在high_score之前,即我得到的是"id": 10, "high_score": 180,这就是测试运行正常的原因。但在其他时候,high_score出现在id之前,即它是"high_score": 180, "id": 10,这就是测试失败的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24145045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档