2017-05-25 34 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))