3

背景:

我有以下 django 项目设置:

>TopLevel:
>  - App1:
>      * models.py
>      * forms.py
>      * views.py
>      * __init__.py
>      * Tests/
>        * __init__.py
>        * test_simple.py

这是 test_simple.py 中的代码:

from django.test import TestCase


class SimpleTest(TestCase):
    def test_basic_addition(self):
        """
        Tests that 1 + 1 always equals 2.
        """
        self.assertEqual(1 + 1, 2)

现在,当我运行时:

> python manage.py test app1

我得到以下输出:

>Creating test database for alias 'default'...
>
>----------------------------------------------------------------------
>Ran 0 tests in 0.000s
>
>OK
>Destroying test database for alias 'default'...

但是,如果我改为使用以下项目结构:

>TopLevel:
>  - App1:
>      * models.py
>      * forms.py
>      * views.py
>      * __init__.py
>      * tests.py

其中 tests.py 有以下代码:

from django.test import TestCase


class SimpleTest(TestCase):
    def test_basic_addition(self):
        """
        Tests that 1 + 1 always equals 2.
        """
        self.assertEqual(1 + 1, 2)

现在,当我运行时:

> python manage.py test app1

我得到:

>Creating test database for alias 'default'...
>.
>----------------------------------------------------------------------
>Ran 1 test in 0.002s
>
>OK
>Destroying test database for alias 'default'...

问题:

为什么 Django 无法识别我的 Tests 目录 && 为什么 Django 的 unittest 结构不会运行 Tests/ 中列出的任何测试?

4

3 回答 3

2

睡个好觉,甚至不考虑测试发现的一种选择是使用鼻子。它有很多功能,其中之一是自动测试发现

有一个名为django_nose的包可以帮助您将 django 项目与鼻子集成:

特征

在你的 Django 测试中,鼻子的所有优点,比如......

  • ...
  • 无需将所有测试导入tests/__init__.py. 这不仅可以节省繁忙的工作,还可以消除意外影响测试课程的可能性。
  • ...

希望有帮助。

于 2013-08-31T18:02:59.233 回答
2

您将需要更改您的Teststotests并将每个测试导入tests/__init__.py到 django 1.5 AFAIK。还有一个测试运行器将按照 unittest2 发现的工作方式工作。此功能已集成到 django1.6 中。

于 2013-08-31T18:05:38.073 回答
1

看看:在 Django 中运行测试

测试发现基于 unittest 模块的内置测试发现。默认情况下,这将在当前工作目录下的任何名为“test*.py”的文件中发现测试。

于 2013-08-31T17:55:09.703 回答