[英]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.