python项目导入uwsgi如何做单元测试?
python project import uwsgi how to do unit test?
我的 Flask 应用程序正在使用 uwsgi spooler
所以我 import uwsgi
在 project.But 当我 运行 我的单元测试用例时,然后
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函数时遇到了同样的问题。没有正式的解决方法,但我可以分享我的解决方案。
您应该将所需的功能提取到一个单独的 class/function 中,该 class/function 会延迟加载 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
- 它是第三方库,测试不是我们的责任 - 我们假设它按预期工作。
我的 Flask 应用程序正在使用 uwsgi spooler
所以我 import uwsgi
在 project.But 当我 运行 我的单元测试用例时,然后
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函数时遇到了同样的问题。没有正式的解决方法,但我可以分享我的解决方案。
您应该将所需的功能提取到一个单独的 class/function 中,该 class/function 会延迟加载 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
- 它是第三方库,测试不是我们的责任 - 我们假设它按预期工作。