我可以使用PHPUnit模拟接口实现吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以使用PHPUnit模拟接口实现吗?相关的知识,希望对你有一定的参考价值。
我有一个我想要模拟的界面。我知道我可以模拟该接口的实现,但有没有办法只是模拟接口?
<?php
require __DIR__ . '/../vendor/autoload.php';
use MyHttpIClient as IHttpClient; // The interface
use MySomethingElseClient as SomethingElseClient;
class SomethingElseClientTest extends PHPUnit_Framework_TestCase {
public function testPost() {
$url = 'some_url';
$http_client = $this->getMockBuilder('CpmHttpIClient');
$something_else = new SomethingElseClient($http_client, $url);
}
}
我得到的是:
1) SomethingElseTest::testPost
Argument 1 passed to CpmSomethingElseClient::__construct() must be an instance of
MyHttpIClient, instance of PHPUnit_Framework_MockObject_MockBuilder given, called in
$PATH_TO_PHP_TEST_FILE on line $NUMBER and defined
有趣的是,PHPUnit, mocked interfaces, and instanceof会建议这可行。
答案
代替
$http_client = $this->getMockBuilder(CpmHttpIClient::class);
使用
$http_client = $this->getMock(CpmHttpIClient::class);
要么
$http_client = $this->getMockBuilder(CpmHttpIClient::class)->getMock();
完全有效!
另一答案
以下适用于我:
$myMockObj = $this->createMock(MyInterface::class);
另一答案
$http_client = $this->getMockBuilder(CpmHttpIClient::class)
->setMockClassName('SomeClassName')
->getMock();
在某些情况下,setMockClassName()可用于解决此问题。
以上是关于我可以使用PHPUnit模拟接口实现吗?的主要内容,如果未能解决你的问题,请参考以下文章