lapistano/wsunit

A PHPUnit 扩展,允许通过配置将单元测试提升为功能测试

v2.0.0 2012-05-22 22:45 UTC

This package is not auto-updated.

Last update: 2024-09-14 14:50:17 UTC


README

===============================================================================

!! 已弃用 !!

» 请使用后续项目 PHP-VCR «

================================================================================

PHPUnit WebServices 扩展

通过注册测试监听器到 PHPUnit,使其执行测试运行器特定状态的动作变得极其容易(例如,当测试开始时)。WSUnit 充分利用这一可能性,并监听一些发出的信号。

当前的 Travis 状态:构建状态

目的

WSUnit 通过配置将单元测试提升为功能测试。一旦配置完成,测试监听器就会向指定的位置发送请求,记录响应体和头部信息,并将其持久化到文件系统中。然后,测试本身可以验证响应的正确性。背后的想法是不必强制多次编写 API 测试,并增加已编写验证的复用性。

安装

安装过程很简单,只需要下载源代码,在 phpunit.xml.dist 中配置测试监听器,并创建配置文件以告知监听器哪些测试应该调用哪个 URL 或获取响应。如果您使用 composer,您只需在配置中定义 WSUnit 依赖项,并根据以下描述设置 WSUnit。

Composer

{
    "require-dev": {
        "lapistano/wsunit": " 2.*"
    }
}

此 composer 配置将检出标记为第二个版本的源代码。如果您想要“最新版本”,请将 '2.*' 替换为 'dev-master'。但请注意,这有时可能会损坏。

注意:如果您不知道这意味着什么,请访问 composer 项目网站 以获取更多信息。

GitHub

因此,我建议使用 composer 将代理对象作为项目依赖项。源代码也通过 GitHub 提供。只需像您所熟悉的那样克隆它。

$ git clone git://github.com/lapistano/wsunit.git
$ mkdir -p wsunit/vendor/lapistano
$ cd wsunit/vendor/lapistano
$ git clone git://github.com/lapistano/proxy-object.git

配置

配置分为两部分。一是将实际测试监听器注册到 PHPUnit,二是定义哪些测试(通过名称标识)应请求哪个位置的响应。

PHPUnit

有关 PHPUnit 配置的详细信息,请访问 http://www.phpunit.de/manual/current/en/appendixes.configuration.html 并阅读“测试监听器”部分,或者将示例复制到您的配置中,并简单地调整配置文件的路径。

<listeners>
  <listener class="\lapistano\wsunit\WebServiceListener">
    <arguments>
        <object class="\lapistano\wsunit\ExtensionsWebserviceListenerFactory"/>
        <object class="\lapistano\wsunit\Loader\LoaderConfiguration"/>
        <array>
          <element key="httpClient">
            <string>lapistano\wsunit\Http\HttpClient</string>
          </element>
          <element key="logger">
            <string>lapitano\wsunit\Logger\LoggerFilesystem</string>
          </element>
          <element key="configuration">
            <string>/path/to/configuration.xml</string>
          </element>
        </array>
      </arguments>
    </listener>
  </listeners>

参数

(object) Extensions_Webservice_Listener_Factory 提供操作监听器所需的必要对象的工厂类。

(object) Extensions_Webservice_Listener_Loader_Configuration 加载配置文件的对象。

(array) 包含要注册到工厂的类名称和位置定义文件的位置。

测试监听器配置

除了使 PHPUnit 了解测试监听器和使每个测试了解要从中获取响应的位置外,还需要另一个配置文件。以下示例显示了一个这样的配置。

注意:配置文件的名称和位置是在PHPUnit测试监听器注册中的element[key='configuration']元素中设置的。

警告:请注意,如果您决定使用命名空间,它们也必须在phpunit配置文件中使用以识别所使用的类。如果您在这里犯了错误,PHPUnit将仅忽略您的监听器,而不会发出任何警告或错误。不要问我为什么我知道这一点。这种行为在PHPUnit 3.7中已得到修复。

<?xml version="1.0" encoding="UTF-8"?>
<listener>
    <serializer>\lapistano\wsunit\Serializer\Http\Extensions_Webservice_Serializer_Http_Response</serializer>
    <test case="Example_TestCase" name="testGetData">
        <location href="http://example.org/data.txt" />
    </test>
    <test case="\lapistano\wsunit\Extensions_Webservice_Constraint_JsonErrorMessageProviderTest"
          name='testTranslateTypeToPrefix with data set "expected"'
    >
        <serializer>\lapistano\wsunit\Serializer\Http\Extensions_Webservice_Serializer_Http_Response</serializer>
        <location dataName="expected" href="http://blog.bastian-feder.de/blog.rss">
            <query>
                <param name="mascott[]">tux</param>
                <param name="mascott[RedHat]">beastie</param>
                <param name="os">Linux</param>
            </query>
        </location>
    </test>
</listener>

###可用标签

  • test 每个要识别的测试都被封装在根标签为'listener'的标签中,每个测试由一个'test'标签和部分表示。测试通过测试用例(case属性)和测试名称(name属性)来识别。如果您的测试注册了一个数据提供者,请注意,测试名称将由PHPUnit更改(请参阅示例中的第二个测试部分)。

  • serializer 此标签可以定义在要使用的一般序列化标签中,或者在配置中覆盖全局设置的序列化器。

  • location 定义在测试部分中,它定义了位置和可选的查询字符串。一旦设置了这些信息,配置的位置将用于其响应。

依赖关系

可选

  • proxy-object 如果您想运行测试套件。它必须放在位于项目根目录中的vendor目录中。您可以将其从GitHub克隆,或者使用composer获取。

待办事项

就ws unit目前的发展来看,遗憾的是它还远未完善。以下列表应能给您提供一个关于未来预期的概览。

  • 将测试用例的名称添加到持久化测试用例文件的名称中,以确保唯一性。
  • 实现一个通用的(后备)序列化器,以便能够持久化任何响应。
  • 提供使用wsunit与Symfony2的能力(这可能已经很好,但尚未进行测试)
  • 为新序列化器、加载器和记录器创建新存储库,以实现尽可能的兼容性。
  • 提供更多序列化器、加载器和记录器实现(例如从yml文件中加载配置)

如果您有其他用例、想法和/或要求,请随时fork和贡献。您非常受欢迎 ;)