使用 Stub 和 Mock 的 APItest 的 PHPUNIT 示例
你将为其创建单元测试用例的类。 class Authorization {
/* Observer so that mock object can work. */
public function attach(Curl $observer)
{
$this->observers = $observer;
}
/* Method for which we will create test */
public function postAuthorization($url, $method) {
return $this->observers->callAPI($url, $method);
}
}
现在我们不希望我们的测试代码有任何外部交互,因此我们需要为 callAPI 函数创建一个模拟对象,因为这个函数实际上是通过 curl 调用外部 URL。 class AuthorizationTest extends PHPUnit_Framework_TestCase {
protected $Authorization;
/**
* This method call every time before any method call.
*/
protected function setUp() {
$this->Authorization = new Authorization();
}
/**
* Test Login with invalid user credential
*/
function testFailedLogin() {
/*creating mock object of Curl class which is having callAPI function*/
$observer = $this->getMockBuilder('Curl')
->setMethods(array('callAPI'))
->getMock();
/* setting the result to call API. Thus by default whenver call api is called via this function it will return invalid user message*/
$observer->method('callAPI')
->will($this->returnValue('"Invalid user credentials"'));
/* attach the observer/mock object so that our return value is used */
$this->Authorization->attach($observer);
/* finally making an assertion*/
$this->assertEquals('"Invalid user credentials"', $this->Authorization->postAuthorization('/authorizations', 'POST'));
}
}
下面是 curl 类的代码(只是一个示例) class Curl{ function callAPI($url, $method){
//sending curl req
}
}