Django测试发现没有找到非django测试用例

时间:2016-11-12 01:25:19

标签: python django python-unittest

我正在构建一个涉及一些非django功能的应用程序。 我有一个应用程序'机智'在源目录下,这是一个django应用程序,并且具有被延迟的测试用例。

src/wit/   test_django_file1.py, test_django_file2.py etc.

但是还有一些测试用例未被发现或运行

src/utils/ test_nondjango1.py and test_nondjango2.py

src / utils不是已安装的应用列表中的django应用程序

当我跑步时

cd src/
python manage.py test

src / utils下的测试未被发现或运行

我正在使用django jenkins报告覆盖率来获取报道。 我希望通过一次调用来调用所有测试用例,以便覆盖所有代码覆盖率报告。

否则我想知道如果不能单独调用如何以便我可以运行所有测试用例。

如何调试它,并找出正在探索的目录。

1 个答案:

答案 0 :(得分:1)

调试

你的utils dir是一个有效的python包(有__init__.py吗?)。 并且,它下面的模块是否可导入?例如,您可以执行以下操作:

cd root_dir/
python -c "from src.utils import test_nondjango1"

如果上面提到ImportError,那么将其设为可导入是您可以进行测试的一种方式"可被发现"。另一种方法是在运行测试时明确指定目录:

python manage.py tests src.wit src/utils/

这为test runnersrc.wit提供了两个标签,其中包含完整的Python点线路径和src/utils/,它是相对目录。

解释

[Django docs state]它" unittest模块的built-in test discovery"。链接文档中的第一段说:

  

Unittest支持简单的测试发现。为了兼容   通过测试发现,所有测试文件必须是模块或包   (包括命名空间包)可从顶级目录导入   项目(这意味着他们的文件名必须有效   标识符)。

     

测试发现在TestLoader.discover()中实现,但也可以   从命令行使用......

为了进一步澄清,discover() method docs说:

  

发现(start_dir,pattern =' test * .py',top_level_dir =无)

     

通过从子目录中递归到子目录来查找所有测试模块   指定启动目录,并返回包含的TestSuite对象   他们。仅加载与模式匹配的测试文件。 (使用shell   样式模式匹配。)只有可导入的模块名称(即   将加载有效的Python标识符。

     

所有测试模块必须可从项目的顶层导入。   如果开始目录不是顶级目录,那么顶部   级别目录必须单独指定。

     

如果导入模块失败,例如由于语法错误,那么   这将记录为单个错误,发现将继续。   如果导入失败是由于SkipTest被引发,那么它将是   记录为跳过而不是错误。