PyCharm运行选择单元测试

时间:2016-04-25 17:35:22

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

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

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

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

2 个答案:

答案 0 :(得分:0)

Pycharm的'Python Unittest'配置在后台使用unittest.TestLoader来加载测试。现在Pycharm实际上试图自动收集测试用例,但不知道如何处理TestSuite实例,甚至更少的函数返回这样的实例。

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

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

然后在pycharm配置项中,选择“脚本”并提供tests/__init__.py

load_tests函数实际告诉测试加载器模块中可用的测试:)

在此处详细了解这个漂亮的技巧:https://docs.python.org/2.7/library/unittest.html#load-tests-protocol

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

答案 1 :(得分:0)

我发现一件事,在特殊情况下,我的Test类来自在本地模块中定义的unittest.TestCase的子类。 pycharm中存在一个已存在多年的已知错误,在某些情况下(例如将导入标记为未知),有时它可能无法完全看到您的virtualenv中的本地模块。有一种解决方法,可以将本地项目的鸡蛋或其源路径添加为使用它的项目中的源。

当我针对其他bug进行解决时,问题就消失了。因此,由于另一个问题,pycharm机械似乎无法将我的Test类识别为unittest.TestCase。