首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django test.TestCase诉unittest.TestCase

Django test.TestCase诉unittest.TestCase
EN

Stack Overflow用户
提问于 2013-11-18 09:30:54
回答 2查看 1K关注 0票数 3

我想知道一些关于为您的测试提供数据的最佳实践的事情。

来自文档

代码语言:javascript
运行
复制
from django.test import TestCase
from myapp.models import Animal

class AnimalTestCase(TestCase):
    def setUp(self):
        Animal.objects.create(name="lion", sound="roar")
        Animal.objects.create(name="cat", sound="meow")

    def test_animals_can_speak(self):
        """Animals that can speak are correctly identified"""
        lion = Animal.objects.get(name="lion")
        cat = Animal.objects.get(name="cat")

与上面的示例一样,我希望在测试用例的setUp方法中保存一些模型,稍后我将在特定的测试案例中使用该方法。我当然可以为此提供一个json工具,但我宁愿在代码中创建模型,以提高透明度,因为这一次的模型非常少。

当我使用django.test.TestCase时,每个单独的测试都根据文档在事务中运行。但是数据库中不存在来自我的的数据。我在调试器中运行它,并连接到临时数据库并检查它。

当使用django.utils.unittest.TestCase时,数据是存在的。唉,这个方法是聚合数据,因为它是为每个单独的测试运行的。

我理解为什么unittest.TestCase会因为不刷新数据库而聚合数据。我不理解的是为什么在使用django.test.TestCase时数据不存在。即使在setUp()方法的末尾,它仍然是空白的。

django.test.TestCase不应该保存任何数据还是我做了什么完全错误的事情?

编辑1:用这个做了一个干净的项目,它开始工作了,正如我所怀疑的那样。django.test.TestCase为每个单独的运行填充了setup()方法中的数据,所以我想我的设置肯定有一些可疑之处。我会使用奥卡姆剃须刀,看看我能不能找出它是什么。

编辑2:清除模型和测试文件,并再次运行测试。将调试器设置为在setUp()之后停止,但数据库中仍然没有任何内容。这些对象确实有一个pk,并且可能会保存到数据库中。检查继承到ModelModel对象,并根据adding属性将其保存到数据库中。

将此调试代码添加到setUp()方法中:

代码语言:javascript
运行
复制
from django.db import connections
    print connections.databases

{'default': {'ENGINE': 'django.db.backends.mysql', 
'NAME': 'test_DATABASE_temp', 'TEST_CHARSET': None, 
'TEST_COLLATION': None, 'HOST': 'localhost', 'USER': 'user', 
'TEST_NAME': None, 'PASSWORD': 'password}

但当添加:

代码语言:javascript
运行
复制
print Animals.objects.all().count()

2

我得到的答复是,实际上有可用的对象。但他们在哪里?我必须承认,现在我对此有点痴迷了。

我现在可以继续,但仍然没有一个令人满意的答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-23 09:06:59

Django的django.test.TestCase不提交事务,因此它从未出现在数据库中。整个测试用例都是执行在一个大的事务的,这样您就不能从外部检查数据库发生了什么(因为在事务提交之前,数据库实际上什么也没有发生,这是从来没有发生的)

票数 2
EN

Stack Overflow用户

发布于 2013-11-18 11:56:02

django.test.TestCase为您做了几件事,其中之一是创建测试数据库(并在测试完成后将其销毁)。这里记录了这一点:https://docs.djangoproject.com/en/stable/topics/testing/overview/#the-test-database

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

https://stackoverflow.com/questions/20044290

复制
相关文章

相似问题

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