【问题标题】:Running Python package unit tests in PyCharm在 PyCharm 中运行 Python 包单元测试
【发布时间】:2014-04-08 22:35:11
【问题描述】:

我刚刚“移植”了一个我正在写入 PyCharm 的 Python 包,并且在从 IDE 为整个包运行单元测试时遇到了一些麻烦。

在包的__init__.py 中,我有load_tests 函数,它遍历包中的所有模块并加载相关测试。它运行出色:

$python -m unittest my_package

但是,当我尝试从 PyCharm 运行它时(通过在“项目”窗口中选择顶级目录并按 Ctrl+Shift+F10)我在“运行”窗口中得到 No tests were found,并且 p>

...\python.exe ...\pycharm\utrunner.py .../my_package/ true
Testing started at ...
Process finished with exit code 0
Empty test suite.

在控制台窗口中。

我快速浏览了 PyCharm 的 utrunner.py,它似乎正在寻找具有特定模式的模块(以 test 开头)。我想保留目前的香草方法。如何将 PyCharm 配置为使用 __init__.py 中的 load_tests,同时尽可能少地修改代码?

顺便说一下,单个模块的测试套件在 PyCharm 中运行得很好。

使用 PyCharm 3.1 社区版、Python 2.7。

提前谢谢你。

【问题讨论】:

    标签: pycharm python-unittest


    【解决方案1】:

    这个答案是根据 PyCharm 3.4 编写的。

    有同样的问题,在这个答案中找到了问题的解决方案,希望我理解你的问题:

    https://stackoverflow.com/a/12242021/2427749

    我这样配置了我的 Python 测试运行器配置:

    • 选中“文件夹中的所有内容”
    • 模式是正则表达式“.*_Test.py”(不带引号)
    • 选中“仅检查 unittest.TestCase 的子类”。

    现在它在我的子文件夹中找到我的单元,名为 classToBeTested_Test.py

    顺便说一句,我现在面临另一个问题:单元测试无法导入要测试的模块。我认为不同的根文件夹的原因。

    【讨论】:

    • 您可以在Settings > Project Structure > Add Content Root中添加不同的根文件夹。
    • 仅供参考,对其他人而言...我花了一点时间,但“模式”使用 regex,而不是像 *Test.py 这样的常规 shell glob。如果使用类似的东西,测试运行器会崩溃。直到我查看堆栈跟踪,我才意识到它需要一个正则表达式!
    • 只是为那些可能对正则表达式一无所知的人完成,单个开始 ( * ) 不会递归搜索,为此使用两颗星。例如:**_test.py
    • @Memophysic 至少对我来说,这是正则表达式中的非法语法(多次重复,没有以前的模式)。看起来像 glob。
    • @VillasV 确实如此,但它在 PyCharm 中有效。我不知道 JetBrain 的人是如何实现它的。 PyCharm 毕竟是用 Java 编码的。无论如何 ** 现在很常见,甚至 glob 从 3.5 开始就可以使用它。
    【解决方案2】:

    使用 PyCharm 2016.2:

    • 测试:脚本
    • 脚本/path/to/tests/__init__.py
    • 检查只检查 unittest.TestCase 的子类。这会导致 utrunner 使用 unittest.TestLoader.loadTestsFromModule() 并且该方法调用 load_tests()(如果存在于模块中)。

    即命令是

    python C:\python\pycharm\helpers\pycharm\utrunner.py /path/to/tests/__init__.py true
    

    我还必须从__init__.py 中的sys.path 中删除测试目录(参见PY-15889):

    basedir = os.path.dirname(__file__)
    try:
        sys.path.remove(basedir)
    except ValueError:
        pass
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-22
      • 2016-08-19
      • 2017-01-19
      • 2016-01-18
      • 2018-02-16
      • 2012-06-07
      • 2021-09-25
      • 1970-01-01
      相关资源
      最近更新 更多