【问题标题】:PyCharm run select unittestsPyCharm 运行选择单元测试
【发布时间】:2016-08-19 05:51:28
【问题描述】:

我有一个 python 包,其中我所有的 unittest 测试类都存储在子包mypkg.tests 的模块中。在tests/__init__.py 文件中,我有一个名为suite 的函数。我通常通过调用具有test_suite='satpy.tests.suite'python setup.py test 来运行这些测试。是否可以从 pycharm 运行这个测试套件?

我拥有套件功能的原因是它只包含准备好从我的持续集成运行的测试,但目录中存在其他失败的测试(来自旧版本的包)。我还可以看到这对于选择快速单元测试而不是长时间运行测试很有用。我尝试过作为脚本运行、作为nosetest 或unittest 配置运行。我试过添加if __name__ == "__main__":和其他类型的命令行运行方法都没有成功。

有没有办法从 pycharm 运行配置中只运行一些测试?

【问题讨论】:

  • 我发现的最佳解决方法是 from mypkg.tests.test_one import *tests/__init__.py 的顶部,然后在 pycharm unittest 配置中作为脚本运行测试。
  • 仅供参考,供以后看到此情况的任何人使用,据我所知,setuptools 已弃用 python setup.py test 用法。我已经将我的大部分项目改为使用 pytest 或调用 python -m unittest

标签: python unit-testing pycharm nose python-unittest


【解决方案1】:

我发现在特定情况下,我的 Test 类来自 unittest.TestCase 的子类,该子类在本地模块中定义。 pycharm 中有一个已知的错误已经存在了多年,它有时无法完全看到虚拟环境中的本地模块,例如将导入标记为未知。有一种解决方法是添加该本地项目的 egg 或其源路径作为使用它的项目中的源。

当我为另一个错误解决这个问题时,问题就消失了。因此,由于其他问题,pycharm 机器似乎没有将我的 Test 类识别为 unittest.TestCase 。

【讨论】:

    【解决方案2】:

    Pycharm 的“Python Unittest”配置在后台使用 unittest.TestLoader 来加载测试。现在 Pycharm 实际上尝试自动收集测试用例,但不知道如何处理 TestSuite 实例,更不用说返回此类实例的函数了。

    解决您的问题的方法是将load_tests 函数添加到您的tests/__init__.py 文件中,如下所示:

    def load_tests(loader, tests, pattern):
        return suite()
    

    然后在pycharm配置项中,选择'Script'并给出tests/__init__.py

    load_tests 函数实际上告诉测试加载器模块中有哪些测试可用:)

    在这里查看更多关于这个漂亮技巧的信息:https://docs.python.org/2.7/library/unittest.html#load-tests-protocol

    但请注意,它仅适用于 python 2.7 及更高版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-02
      • 2014-04-08
      • 2015-06-22
      • 2016-01-18
      • 2018-02-16
      • 2017-01-19
      • 2019-01-15
      • 1970-01-01
      相关资源
      最近更新 更多