蟒蛇:嘲弄木薯包装
问题描述:
仍然是新的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'))))))
这是有没有更好的方式来嘲笑木薯包装模块?
答
取决于你想测试什么,我认为它会改变应该如何做出模拟。例如,不用用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))