如何使用PHPUnit测试Web服务?

时间:2009-12-23 10:35:33

标签: php unit-testing soap web-services phpunit

我需要测试几个SOAP Web服务。 我可以运行哪些类型的测试?

3 个答案:

答案 0 :(得分:8)

使用返回预先记录的结果XML的SoapClient模拟来测试本地使用者类别要好得多,因为单元测试意味着快速运行并且与远程服务无关。

  • 创建Client类的Mock类(您应该有一个SoapClient的对象包装器,以便能够彻底测试它)。
  • 使用$this->returnValue()返回系统预期的预先录制的XML响应或标题

请参阅:http://www.phpunit.de/manual/current/en/test-doubles.html

如果您的系统依赖于这些远程服务的可用性,您可以实现一个监视服务来检查资源是否可用,但这不应该在单元测试本身中完成。

亲切的问候, 托马斯

答案 1 :(得分:0)

测试SOAP Web服务与测试“本地”方法完全相同:您必须调用该方法,传递一些参数,并将返回值切换,以验证它是否与参数相对应你给了。

当然,对于网络服务,调用会更复杂,因为你必须使用SoapClient来调用方法,但这个想法仍然是一样的。

我看到的最大问题是:

  • Web服务调用很慢(它们通过网络进行),这意味着您的测试需要一段时间才能执行 - 这意味着您将无法经常执行它们
  • 使用网络服务,您可能有多种可能的失败原因;这意味着你会发现测试失败的原因会有更多麻烦:
    • 它可能会失败,因为有一个错误 - 这是理想的情况
    • 但它也可能因为远程服务器已关闭而失败
    • 或者因为网络已关闭
    • 可能还有其他一些可能的原因
  • 当然,由于代码将在远程服务器上执行,而不是在运行PHPUnit的机器上执行,因此获取代码覆盖率(例如)

答案 2 :(得分:0)

我发现http://www.versioneye.com/package/fakeweb

  

FakeWeb是在Ruby中伪造Web请求的助手。它适用于   全局级别,无需修改代码或编写大量存根。