在PyCharm中运行Python包单元测试

时间:2014-03-06 10:40:42

标签: pycharm python-unittest

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

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

$python -m unittest my_package

然而,当我尝试从PyCharm运行它时(通过选择Projects窗口中的顶级目录并点击 Ctrl + Shift + F10 ),我在Run窗口中得到No tests were found,并且

...\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配置为使用load_tests中的__init__.py

顺便说一句,各个模块的测试套件可以从PyCharm运行得很好。

使用PyCharm 3.1 Community Edition,Python 2.7。

提前谢谢。

2 个答案:

答案 0 :(得分:5)

这个答案是考虑到PyCharm 3.4。

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

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

我配置了我的Python Test runner配置:

  • 选中'全部在文件夹'
  • 模式是正则表达式'。* _ Test.py' (没有引号)
  • 选中'仅检查unittest.TestCase'的子类。

现在它在名为classToBeTested_Test.py

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

答案 1 :(得分: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

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

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