2017-05-25 76 views
0

仍然是新的python,特別是編寫python單元測試。蟒蛇:嘲弄木薯包裝

找到http://tapioca-wrapper.readthedocs.io/en/stable/並且圍繞api寫了一個簡單的客戶端。

該模塊實質上採用api有效負載的鍵/值對並將它們轉換爲對象。由於這是動態的,並且由有效載荷生成,所以我很難用寫模擬單元測試的最佳方法。

樣品包裝器代碼:

api_client = APIClientAdapter() 
vm_machine = api_client.vm_machine(vm_name='playdohvm').get() 
print("vm name: {}".format(vm_machine.name().data) 

我的模擬代碼看起來像

self.mock_api_client = Mock(
    spec=APIClientAdapter, 
    return_value=Mock(
     get=Mock(
      return_value=Mock(
       name=Mock(
        return_value=Mock(
         data='playdohvm')))))) 

這是有沒有更好的方式來嘲笑木薯包裝模塊?

回答

0

取決於你想測試什麼,我認爲它會改變應該如何做出模擬。例如,不用用Mock對象表示所有東西,最好準備一個簡單的對象並用mock.patch替換它。

class DummyAPIClientAdapter: 

    data = 'playdohvm' 

    def __call__(self, *args, **kwargs): 
     return self 
    def __getattr__(self, *args, **kwargs): 
     return self 

with mock.patch('APIClientAdapter', new=DummyAPIClientAdapter): 
    api_client = APIClientAdapter() 
    vm_machine = api_client.vm_machine(vm_name='playdohvm').get() 
    print("vm name: {}".format(vm_machine.name().data))