使用 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
}
}