lapistano / wsunit
A PHPUnit 扩展,允许通过配置将单元测试提升为功能测试
Requires
- php: >=5.3.6
- lapistano/proxy-object: 2.*
This package is not auto-updated.
Last update: 2024-09-14 14:50:17 UTC
README
===============================================================================
!! 已弃用 !!
» 请使用后续项目 PHP-VCR «
================================================================================
PHPUnit WebServices 扩展
通过注册测试监听器到 PHPUnit,使其执行测试运行器特定状态的动作变得极其容易(例如,当测试开始时)。WSUnit 充分利用这一可能性,并监听一些发出的信号。
目的
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和贡献。您非常受欢迎 ;)