2017-10-17 166 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 - 這是一個第三方庫,測試不是我們的責任 - 我們假設它按預期工作。