python - Django SQLite 测试异常 : Different path of execution?

标签 python django unit-testing sqlite

这只是我想根据其他人的反馈和可能类似的经验得出的理论。

一直在使用 mySQL 运行测试,但当然,内存中的 SQLite 数据库要快得多。但是,它似乎遇到了一些问题。

DATABASE_ENGINE 设置为使用 django.db.backends.sqlite3 并且我运行 manage.py test 时,输出不是希望:

(删除了大部分行,但指出了有趣的失败点)

$ python manage.py test
Traceback (most recent call last):
  File "manage.py", line 12, in 
    execute_manager(settings)
  File "/Users/bartekc/.virtualenvs/xx/lib/python2.6/site-packages/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/Users/bartekc/domains/xx/xx/associates/yy/models.py", line 51, in 
    class AcvTripIncentive(models.Model):

  # First interesting failure
  File "/Users/bartekc/domains/xx/xx/associates/yy/models.py", line 55, in AcvTripIncentive
    trip = models.OneToOneField(Trip, limit_choices_to={'sites' : Site.objects.get(name='ZZ'), 'is_active' : True,})

  # Next interesting failure
   File "/Users/bartekc/domains/xx/xx/associates/yyz/models.py", line 252, in 
    current_site = Site.objects.get_current()

有多个像这样的失败,但只是指出了几个。问题很明显。 Site 模型没有实际数据,但文件包含尝试获取 Site 模型下的当前或特定实例的代码。

现在,我可以想到一个简单的解决方案:应该将 OneToOneField 切换为使用带有 limit_choices_to 的函数,第二个相同。然后在需要时调用这些函数,而不是在 Django 初始扫描文件时调用。

但是,我的实际问题是:为什么 SQLite 而不是 mySQL 会发生这种情况?。两个数据库引擎通过测试进行处理的方式是否不同?我不这么认为,因为 Python 正在完成模型的所有编译工作。

这里到底发生了什么?

干杯。

最佳答案

你不是有什么原因吗 mocking访问数据库?当您向混合物中添加数据库(无论是什么数据库)时,您的 UT 边界会变得非常宽。它开始看起来更像是集成测试而不是单元测试。

关于python - Django SQLite 测试异常 : Different path of execution?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4410898/

相关文章:

python - PyMongo 中的 MapReduce

ajax - Django 和 Highcharts - 生成图表,但仍处于干燥状态?

.NET NUnit 测试 - Assembly.GetEntryAssembly() 为 null

python - 在 Django/Python 中编写单元测试

.net - Rhino 模拟错误 : Previous method 'IEnumerator.MoveNext();' requires a return value or an exception to throw

python - ImportError: libcblas.so.3: 无法打开共享对象文件: 没有那个文件或目录

python - 谷歌云平台: How can I get a signed URL for putting an object to Google Cloud Store with Python

django django 是否有像 cakephp 这样的自动时间戳创建/更新字段?

python - Pytest 从不同的测试用例文件中排序

python - 如何在django中传递多个url参数