首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用phpspec测试API包装器

用phpspec测试API包装器
EN

Stack Overflow用户
提问于 2014-11-03 10:43:15
回答 1查看 853关注 0票数 0

我试图使用带有phpspec的TDD为API类创建一个包装器。

我编写了一个Client类,它处理从REST请求/检索数据的问题,然后映射到一个Entity类中,因此它的行为类似于ORM。

我现在有点卡住了,我来用TDD测试和扩展应用程序。由于Client是实体类的依赖项(以便它们可以请求自己的子对象),所以我很难对此进行模拟。

例如,以下是其中一个实体Comic.php的样子:

代码语言:javascript
运行
复制
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版本:

代码语言:javascript
运行
复制
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()测试会是什么样子呢?

希望这是合理的,可以提供更多的信息,如果需要。

谢谢你看一看。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-11 14:59:17

我不确定it_gets_all_characters是否是您在ComicSpec中测试的内容,因为获取所有字符并不是Comic的职责之一。对吗?

Comic必须做的(它的责任)是调用客户端并信任它来检索字符。因此,在ComicSpec中,您应该模拟Client并测试Comic是否使用正确的消息和参数调用它:

ComicSpec

代码语言:javascript
运行
复制
function it_gets_all_characters(Client $client)
{
    $this->beConstructedWith($client);

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

    $this->getCharacters();
}

请注意,您还没有测试API调用,因此您还需要一个ClientSpec来进行测试。如果您使用curl,我认为测试它基本上是不可能的(不实际调用服务),但也许您可以使用口香糖。在ClientSpec中,您将模拟HttpClient并测试Client是否使用正确的消息和参数调用它。

我希望这能帮到你!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26712498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档