擅长:python、mysql、java
<p>您可以将测试放在应用程序的<code>tests/</code>子目录(而不是<code>tests.py</code>文件)中,并在仅测试的模型中包含<code>tests/models.py</code>。</p>
<p>然后提供一个测试运行脚本(<a href="https://github.com/carljm/django-model-utils/blob/master/runtests.py" rel="noreferrer">example</a>),其中包含<code>INSTALLED_APPS</code>中的<code>tests/</code>“应用程序”。(当从实际项目运行应用程序测试时,这不起作用,因为实际项目中没有测试应用程序,<code>INSTALLED_APPS</code>,但我很少发现从项目运行可重用的应用程序测试有用,而Django 1.6+默认情况下不起作用。)</p>
<p>(<strong>注意</strong>:下面描述的可选动态方法仅在Django 1.1+中有效,前提是您的测试用例子类<code>TransactionTestCase</code>显著减慢了您的测试速度,并且不再在Django 1.7+中有效。它留在这里只是为了历史利益,不要用它。)</p>
<p>在测试开始时(即在安装方法中,或在一组doctest开始时),可以动态地将<code>"myapp.tests"</code>添加到“已安装的应用程序”设置中,然后执行以下操作:</p>
<pre><code>from django.core.management import call_command
from django.db.models import loading
loading.cache.loaded = False
call_command('syncdb', verbosity=0)
</code></pre>
<p>然后在测试结束时,应通过还原已安装的旧版本的应用程序并再次清除应用程序缓存来进行清理。</p>
<p><a href="http://www.djangosnippets.org/snippets/1011/" rel="noreferrer">This class</a>封装了模式,这样就不会把测试代码弄得那么混乱。</p>