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 - 它是第三方库,测试不是我们的责任 - 我们假设它按预期工作。