当前位置: 首页 > 面试题库 >

Python-使用典型的测试目录结构运行unittest

司毅庵
2023-03-14
问题内容

即使是一个简单的Python模块,最常见的目录结构似乎也是将单元测试分成各自的test目录:

new_project/
    antigravity/
        antigravity.py
    test/
        test_antigravity.py
    setup.py
    etc.

例如,请参见此Python项目howto。

我的问题是,实际上运行测试的通常方法是什么?我怀疑这对除我以外的所有人来说都是显而易见的,但是你不能仅从python test_antigravity.pytest目录运行,import antigravity因为模块不在路径上,它将失败。

我知道我可以修改PYTHONPATH和其他与搜索路径有关的技巧,但我不敢相信这是最简单的方法-如果你是开发人员,那很好,但如果用户只是想检查测试结果,就不能期望用户使用通过。

另一种选择是将测试文件复制到另一个目录中,但是似乎有点愚蠢,并且错过了将它们放在一个单独目录中的意义。

那么,如果你刚刚将源代码下载到我的新项目中,将如何运行单元测试?我希望有一个答案可以对用户说:“要运行单元测试,请执行X。”


问题答案:

我认为最好的解决方案是使用unittest 命令行界面,该界面会将目录添加到,sys.path因此你不必(在TestLoader类中完成)。

例如,对于这样的目录结构:

new_project
├── antigravity.py
└── test_antigravity.py

你可以运行:

$ cd new_project
$ python -m unittest test_antigravity

对于像你这样的目录结构:

new_project
├── antigravity
│   ├── __init__.py         # make it a package
│   └── antigravity.py
└── test
    ├── __init__.py         # also make test a package
    └── test_antigravity.py

在test包内的测试模块中,你可以antigravity照常导入包及其模块:

# import the package
import antigravity

# import the antigravity module
from antigravity import antigravity

# or an object inside the antigravity module
from antigravity.antigravity import my_object

运行一个测试模块:

要运行单个测试模块,在这种情况下test_antigravity.py:

$ cd new_project
$ python -m unittest test.test_antigravity

只需以导入模块的相同方式引用测试模块即可。

运行单个测试用例或测试方法:

你也可以运行一个TestCase或一个测试方法:

$ python -m unittest test.test_antigravity.GravityTestCase
$ python -m unittest test.test_antigravity.GravityTestCase.test_method

运行所有测试:

你还可以使用测试发现,它将为你发现并运行所有测试,它们必须是命名为模块或包的模块test*.py(可以通过-p, –pattern标记进行更改):

$ cd new_project
$ python -m unittest discover

这将运行包中的所有test*.py模块test



 类似资料:
  • 问题内容: 即使是一个简单的Python模块,最常见的目录结构似乎也是将单元测试分成各自的目录: 例如,请参阅此Python项目howto。 我的问题是 ,实际上运行测试的通常方法 是 什么? 我怀疑这对除我以外的所有人来说都是显而易见的,但是您不能仅从test目录运行,因为模块不在路径上,它将失败。 我知道我可以修改PYTHONPATH和其他与搜索路径有关的技巧,但是我不相信这是最简单的方法-

  • 本文向大家介绍meteor 经典目录结构,包括了meteor 经典目录结构的使用技巧和注意事项,需要的朋友参考一下 示例 构建应用程序时,您需要了解的第一件事是,Meteor工具具有一些使用特定逻辑进行硬编码的目录。在非常基本的级别上,以下目录被“烘焙”到Meteor捆绑程序中。 参考页面:《流星指南》>“特殊目录”

  • 问题内容: 对于整个MV *客户端框架的狂热,我还是一个新手。它不一定是AngularJS,但我选择它是因为它对我来说比淘汰赛,Ember或Backbone更自然。无论如何,工作流程是怎样的?人们是否开始使用AngularJS开发客户端应用程序,然后将其连接到后端? 还是相反,首先在Django,Flask,Rails中构建后端,然后将AngularJS应用附加到该后端?是否有“正确”的方式来做,

  • 在树结构的目录系统中,任何目录条目都可以是文件或子目录。 树结构的目录系统克服了两级目录系统的缺点。 现在可以将类似的文件分组到一个目录中。 每个用户都有自己的目录,并且不能进入其他用户的目录。 但是,用户有权读取根数据,但他不能写入或修改此数据。 只有系统管理员才能完全访问根目录。 在这个目录结构中搜索更有效率。 使用当前工作目录的概念。 一个文件可以通过两种类型的路径访问,无论是相对的还是绝对

  • 问题内容: 我需要能够通过在Linux shell中键入一行来运行当前目录中的所有测试。在某些目录中,这可以正常工作。但是在其他情况下,当我键入“ nosetests”时,则不会运行任何测试。如果我分别要求进行测试,则将运行这些测试,但我需要它们全部自动运行。这是不起作用的目录之一: 当我在父目录中运行“ nosetests”时,将运行某个子目录中的所有测试,但不会运行/ extwebserver

  • 问题内容: 我有一个用Rails编写的应用程序。为了对其进行测试,我构建了一个docker映像。一切正常。 但是,当我配置Jenkins运行这些测试时,就会出现问题。在构建步骤中,我要做的是: 其中rspec是在docker-compose.yml上定义的服务,其中包含以下命令: 当rspec返回错误时,构建仍然成功。这里是输出示例: 返回1,构建仍然成功。 如果我通过docker通过其ID检查容