簡體   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