模拟丢失的包进行测试?

时间:2014-07-29 23:42:40

标签: python testing pytest

我有一个项目,其功能可以根据您可用的软件包进行扩展。具体来说,如果你有VTK它有3D图形,如果你有PyQt它有一个GUI,如果你没有它有一些后备。

有没有办法创建一个模拟这些软件包在项目范围内不可用的测试文件,以便我可以检查是否提出了正确的错误消息,警告和建议?

1 个答案:

答案 0 :(得分:3)

我有类似的情况,我开发了一个可以使用requests库的应用程序,但它是一个可选的依赖项,所以这是我的方法。首先有一个收集这些依赖关系的模块

try:
    import requests
except ImportError:
    _has_requests = None

对您可能需要的所有其他模块重复此操作。然后在导入此模块时,代码可以检查_has_requests(等)的值并生成相应的日志消息。至于测试用例,它看起来像这样:

from ... import vendor

class FunctionTestCase(unittest.TestCase):

    def setUp(self):
        self._has_requests = vendor._has_requests
        vendor._has_requests = False

    def tearDown(self):
        vendor._has_requests = self._has_requests

当然,您可能拥有测试与实际模块交互的代码,因此如果您使用的是Python 2.6,则需要使用unittest.skipIf(或unittest2版本)。如果您希望在没有可选依赖项完整列表的系统上运行这些测试,则可以正确跳过未安装此模块的系统的测试。

@unittest.skipIf(not vendor._has_requests, '`requests` not available')
class FunctionWithRequestsTestCase(unittest.TestCase):

    def setUp(self):
        ...