我正在尝试使用PHPUnit测试Web服务接口类。基本上,这个类调用一个SoapClient对象。我试图用这里所描述的getMockFromWsdl
方法PHPUnit来测试这个类:如何在多个测试中模拟测试PHPUnit中的Web服务?
然而,因为我想测试从同一类中的多个方法,每次我设置的对象,我也有设置模拟WSDL SoapClient对象。这导致抛出一个致命的错误:
Fatal error: Cannot redeclare class xxxx in C:\web\php5\PEAR\PHPUnit\Framework\TestCase.php(1227) : eval()'d code on line 15
我如何使用跨多个测试相同的模拟对象,而无需每次都重新生成它从WSDL?这似乎是问题所在。
-
已经被要求张贴一些代码来看看,这里的TestCase的设置方法:
protected function setUp() {
parent::setUp();
$this->client = new Client();
$this->SoapClient = $this->getMockFromWsdl(
'service.wsdl'
);
$this->client->setClient($this->SoapClient);
}
我贴一些代码了在审查的问题。放入class_exists似乎不会解决问题,因为您仍然必须以某种方式检索模拟对象,并且此类将始终运行该eval。除非我要修改PHPUnit本身? 在放置class_exists()方法的地方,你有什么想法? – scraton 2010-03-17 00:18:02
号码停止。 PHPUnit不*需要修改。认真。你为什么使用eval?执行eval的类是问题。 'class_exists'检查仅仅是一个黑客建议,以防止重新声明一个预先存在的类。此检查需要放在执行“评估”的班级内。 – pestilence669 2010-03-17 02:21:10
PHPUnit正在调用eval代码,而不是我自己的代码。我认为它在解析WSDL并从该定义中创建模拟对象时会有所影响。 – scraton 2010-03-17 04:05:09