2017-10-17 100 views
0

我的瓶的应用程序是使用uwsgi spooler所以我import uwsgi在project.But运行我的单元测试用例,然后python项目导入uwsgi如何做单元测试?

Traceback (most recent call last): 
    File "runapp.py", line 55, in <module> 
    import topicservice 
    File "/home/workspace/topic.py", line 36, in <module> 
    import uwsgi 
ImportError: No module named uwsgi 

我知道uwsgi是不是一个Python模块,它是一个二进制server.The应用程序运行通过uwsgi可以访问“uwsgi”模块。但是我的单元测试有什么办法吗?

回答

1

在遇到整个项目中使用的RPC函数时,我遇到了同样的问题。没有官方的解决办法,但我可以分享我的解决方案。

您应该将所需的功能提取到单独的类/函数,该类会延迟加载uwsgi模块。举例uwsgi.rpc

class RPCSender: 

def __init__(self, host_address): 
    self._host_address = host_address 

def send(self, destination, data): 
    import uwsgi 

    uwsgi.rpc(self._host_address, destination, data) 

... 

local_rpc_sender = RPCSender('192.168.173.100:3031') 
local_rpc_sender.send('myfunc', 'myarg') 

现在,当你写测试为使用RPCSender模块,你应该嘲笑了send方法。最好使用mock.patch.object。它不违反任何单元测试规则,因为测试没有意义uwsgi.rpc - 这是一个第三方库,测试不是我们的责任 - 我们假设它按预期工作。