繁体   English   中英

Python-扩展API客户端类或传递实例

[英]Python - Extend an API client class or pass instance

我正在与拥有Python库的API进行交互。 该库提供了APIClient类,该类提供了API的所有功能。 我想根据一些逻辑与此API进行互动,我希望能够测试逻辑wihtout进行API调用(即模拟),因为它是事务性的。

显然,我需要(在某个阶段)模拟一些API客户端的功能,但是我不确定如何最好地做到这一点。

我应该简单地扩展APIClient类,实现我的逻辑,然后再次扩展我的类以创建模拟版本:

class MyClass(APIClient):
   pass #Lots of interesting things actually happen here

class MyTestClass(MyClass):

   def an_overridden_method(self):
      pass #here I implement a method for testing

还是应该将APIClient实例传递给我的类,并且在我想进行测试时,应该传递APIClient类的APIClient版本吗?

class MyClass(object):

   def __init__(self, api_client):
      self.api_client = api_client

class MockAPIClient(APIClient):

   def an_overwritten_method(self):
      pass

还是我有一种替代性的“最佳实践”方法来实现这一目标?

通常,您不会嘲笑被测单元的各个部分。 如果您正在测试MyClass ,那么您要测试的一件事就是它确实可以创建和执行事务。 在您的示例中,重写的方法将未经测试。

相反,您应该模拟实际上会导致交易发生的图层; 安排SomeDatabaseApi.connectSomeDatabaseApi.Connection.startTransaction等实际上是模拟存根,以便被测试的单元仍然调用它们,但是随后您可以看到它们如何被调用。

用于python的模拟测试框架可能比您可能需要的更多,但是我充分利用了MiniMock ,它简单,有效且富有表现力。

+1用于传递api_client实例; 保持思想松散耦合。

另外,根据APIClient类,我将创建一个全新的类,而不继承原始APIClient

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM