【问题标题】:Any way to to use PHPUnit for testing API requests and responses using just PHP?有什么方法可以使用 PHPUnit 仅使用 PHP 测试 API 请求和响应?
【发布时间】:2015-02-04 18:04:01
【问题描述】:

响应是 JSON 格式,我使用的是定制的 MVC 框架,我不确定请求和响应过程是如何产生的。使用以下语法创建服务方法。

public function getSessionsMethod()
{
    // data auto encoded as JSON
    return array('hello', 'world');
}

来自 JavaScript 的请求看起来像这样/svc/api/getSessions。 我最初的想法是简单地使用流方法。这种测试形式是否有最佳实践?

public function testCanGetSessionsForAGivenId()
{
    $params = http_build_query(
        array(
            'id' => 3,
        )
    );
    $options = array(
        'http' => array(
            'method'  => 'GET',
            'content' => $params,
            )
        );
    $context  = stream_context_create($options);
    $response = file_get_contents(
        'http://vbates/svc/api/getSessions', false, $context
    );
    $json     = json_decode($response);
    $this->assertEquals(3, $json->response);
}

【问题讨论】:

标签: phpunit


【解决方案1】:

这在我看来不像unit testing,而是integration testing。你可以使用 PHPUnit 来做,但你应该先了解其中的区别。

获取给定服务方法的响应涉及许多组件:

  1. 调度程序:从 URL 中提取参数并调度到适当的服务方法。
  2. 服务方式:这里做实际工作要测试。
  3. JSON 编码器:将服务方法的返回值转换为 JSON 响应。

您应该首先单独测试它们。一旦您确认调度程序和编码器适用于一般 URL 和返回值,就没有必要浪费循环测试它们是否适用于每个服务方法。

相反,将精力集中在测试每个服务方法上,而不涉及这些其他组件。您的测试用例应该使用各种输入直接实例化和调用服务方法,并对它们的返回值进行断言。这不仅会减少您的工作量,而且会使跟踪问题变得更容易,因为每个故障都将仅限于单个组件。

【讨论】:

  • 非常有用的信息。我不知道我正在使用的自定义框架的内部工作原理——而且真的不能花时间去研究它(没有文档)。
  • @QuincyGlenn - 只要您为保存服务方法而创建的类可以在框架外实例化,您就可以按照我的描述对它们进行单元测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-09
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
相关资源
最近更新 更多