如何使用PHPUnit测试Webservices?

pow*_*tac 4 php phpunit soap unit-testing web-services

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

Tho*_*och 8

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

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

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

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

亲切的问候,托马斯


Pas*_*TIN 0

测试 SOAP Web 服务与测试“本地”方法完全相同:您必须调用该方法,向其传递一些参数,并检查返回值,以验证它是否与您提供的参数相对应。

当然,对于 Web 服务,调用会稍微复杂一些,因为您必须使用 来SoapClient调用该方法,但想法仍然是相同的。

我看到的最大问题是:

  • Web 服务调用速度很慢(它们通过网络),这意味着您的测试将需要时间来执行——这意味着您将无法经常执行它们
  • 对于一项网络服务,您可能会遇到不止一个可能的失败原因;这意味着您将很难找出测试失败的原因:
    • 它可能会失败,因为存在错误——这是理想的情况
    • 但它也可能会失败,因为远程服务器已关闭
    • 或者因为网络故障
    • 可能还有其他一些可能的原因
  • 当然,由于代码将在远程服务器上执行,而不是在运行 PHPUnit 的计算机上执行,因此获得代码覆盖率会困难得多(例如)