簡體   English   中英

使用phpspec測試API包裝器

[英]Testing API wrapper with phpspec

我正在嘗試使用phpspec使用TDD為API類創建包裝。

我編寫了一個Client類,它處理來自REST API的請求/檢索數據,然后將其映射到幾個Entity類中,因此它的行為類似於ORM。

現在,我開始使用TDD來測試和擴展應用程序,這讓我有些困惑。 由於Client是實體類的依賴項(以便它們可以請求自己的子對象),因此我正在努力模擬這一點。

例如,以下是實體之一Comic.php樣子:

class Comic {

  protected $client;

  public $id;

  public function __construct(Client $client)
  {
    $this->client = $client;
  }

  public function getCharacters()
  {
    // just an example, this would return an array of Character objects
    return $this->client->request("comic/{$this->id}/characters");
  }

}

為了簡潔起見,下面是Client.php的簡化版本:

class Client {

  public function __construct($publicKey, $privateKey)
  {
    // make token from $publicKey, $privateKey
  }

  public function request($endpoint)
  {
    // use token for cURL request to endpoint and return data
  }

}

那么, it_gets_all_characters()個例子,在ComicSpec.php針對it_gets_all_characters()進行的測試會如何?

希望這有意義,如果需要,可以提供更多信息。

謝謝參觀。

我不確定it_gets_all_characters是否會在ComicSpec測試,因為獲取所有角色看起來都不像Comic職責之一。 對?

Comic必須做的(其責任)是打電話給客戶並信任客戶以檢索角色。 因此,在ComicSpec您應該模擬Client並測試Comic是否使用正確的消息和參數調用它:

ComicSpec

function it_gets_all_characters(Client $client)
{
    $this->beConstructedWith($client);

    $client->request(Argument::any())->shouldBeCalled();

    $this->getCharacters();
}

注意,您尚未測試API調用,因此您還需要一個ClientSpec來執行此操作。 如果您使用curl我認為基本上不可能進行測試(無需實際調用服務),但是也許可以使用Guzzle ClientSpec您將模擬HttpClient並測試Client是否使用正確的消息和參數調用它。

我希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM