为什么我的应用测试无法被Django测试识别?

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

I get:

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

问题:

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

3个回答

2
有一个好的睡眠方式,可以不用考虑测试发现,那就是使用 nose。它有很多功能,其中之一是自动测试发现
有一个叫做django_nose的包,可以帮助你将django项目与nose集成:

功能

所有nose的好处都在你的Django测试中,例如...

  • ...
  • 省去了将所有测试导入到tests/__init__.py的必要性。这不仅节省了繁琐的工作,还消除了意外遮蔽测试类的可能性。
  • ...
希望能对你有所帮助。

2

在django 1.5之前,您需要将Tests更改为tests,并将每个测试导入到tests/__init__.py中。此外,有一个测试运行器,它可以像unittest2一样工作。这个功能已经集成到django1.6中。


1

请看:Django中的测试运行

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接