python项目导入uwsgi如何做单元测试?
问题描述:
我的瓶的应用程序是使用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”模块。但是我的单元测试有什么办法吗?
答
在遇到整个项目中使用的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
- 这是一个第三方库,测试不是我们的责任 - 我们假设它按预期工作。