对 Web 服务(Web Services)进行上桩或模仿

最后更新于:2022-04-01 03:45:58

# 对 Web 服务(Web Services)进行上桩或模仿 当应用程序需要和 web 服务进行交互时,会想要在不与 web 服务进行实际交互的情况下对其进行测试。为了简单地对 web 服务进行上桩或模仿,可以像使用 `getMock()` (见上文)那样使用 `getMockFromWsdl()`。唯一的区别是 `getMockFromWsdl()` 所返回的桩件或者仿件是基于以 WSDL 描述的 web 服务,而 `getMock()` 返回的桩件或者仿件是基于 PHP 类或接口的。 [Example 9.20, “对 web 服务上桩”](# "Example 9.20. 对 web 服务上桩")展示了如何用 `getMockFromWsdl()` 来对(例如)`GoogleSearch.wsdl` 中描述的 web 服务上桩。 **Example 9.20. 对 web 服务上桩** ~~~ <?php class GoogleTest extends PHPUnit_Framework_TestCase { public function testSearch() { $googleSearch = $this->getMockFromWsdl( 'GoogleSearch.wsdl', 'GoogleSearch' ); $directoryCategory = new stdClass; $directoryCategory->fullViewableName = ''; $directoryCategory->specialEncoding = ''; $element = new stdClass; $element->summary = ''; $element->URL = 'https://phpunit.de/'; $element->snippet = '...'; $element->title = '<b>PHPUnit</b>'; $element->cachedSize = '11k'; $element->relatedInformationPresent = TRUE; $element->hostName = 'phpunit.de'; $element->directoryCategory = $directoryCategory; $element->directoryTitle = ''; $result = new stdClass; $result->documentFiltering = FALSE; $result->searchComments = ''; $result->estimatedTotalResultsCount = 3.9000; $result->estimateIsExact = FALSE; $result->resultElements = array($element); $result->searchQuery = 'PHPUnit'; $result->startIndex = 1; $result->endIndex = 1; $result->searchTips = ''; $result->directoryCategories = array(); $result->searchTime = 0.248822; $googleSearch->expects($this->any()) ->method('doGoogleSearch') ->will($this->returnValue($result)); /** * $googleSearch->doGoogleSearch() 将会返回上桩的结果, * web 服务的 doGoogleSearch() 方法不会被调用。 */ $this->assertEquals( $result, $googleSearch->doGoogleSearch( '00000000000000000000000000000000', 'PHPUnit', 0, 1, FALSE, '', FALSE, '', '', '' ) ); } } ?> ~~~
';