对 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,
'',
'',
''
)
);
}
}
?>
~~~