0

TDD と phpspec を使用して API クラスのラッパーを作成しようとしています。

ClientREST API からのデータの要求/取得を処理するクラスを作成しました。このクラスは、いくつかのEntityクラスの 1 つにマップされるため、ORM のように動作します。

TDDでアプリケーションをテストして拡張するようになったので、少し行き詰まっています。これはClientエンティティ クラスの依存関係であるため (独自の子オブジェクトを要求できるようにするため)、これをモックするのに苦労しています。

たとえば、エンティティの 1 つ は次の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
  }

}

ComicSpec.phpでは、例として、it_gets_all_characters()ルックのテストはどのように行われるのでしょうか?

これが理にかなっており、必要に応じてさらに情報を提供できることを願っています。

ご覧いただきありがとうございます。

4

1 に答える 1

0

すべてのキャラクターを取得することは責任の1つとは思えないのでit_gets_all_characters、あなたがテストすることになるかどうかはわかりません. 右?ComicSpecComic

しなければならないこと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し、正しいメッセージとパラメーターでそれを呼び出すテストを行います。

これが役立つことを願っています!

于 2014-11-11T14:59:17.550 に答える