需要在php中测试的建议
问题描述:
我对测试非常陌生。我有一个web应用程序,用于存储关于书籍的书籍和信息。需要在php中测试的建议
如果我打电话给我的路线/store/
它会触发我的store
方法并在我的数据库中创建一本新书。这是简化的方法:
Book.php
类文件:
public function __construct() {
$this->bookService = new BookService();
}
public function store() {
$input = /* get post input values */
$this->createDatabaseEntry($input);
}
private function createDatabaseEntry($input) {
// Creating database entry
$book = /* bla bla */
$languages = $this->bookService->fetchLanguages($book->goodreads_id);
// And here i loop over the $languages and store them all in a extra table.
}
,在这里我有一个其他服务类BookService.php
:
public function fetchLanguages($goodreads_id) {
// Here i make an guzzle http call to a other service from goodreads.com
}
如何测试这个而不做HTTP请求goodreads ?我需要验证语言在数据库中。我可以使用灯具fetchLanguages()
。但是,我怎样才能存根/模拟(我不知道正确的术语)这个函数?
我使用Laravel和PHPUnit。
答
你需要的就是这个 - 存根BookService类。因为你直接实例化它,所以存根并不是那么容易。您应该将其注入到Book类中,以便您可以在测试中注入存根(可以通过构造函数注入或通过提供setter来覆盖$ this-> bookService)。
一个典型的设置是这样的:
$serviceMock = $this->getMock('BookService');
$serviceMock->method('fetchLanguages')->willReturn(<some hard-coded-result-here>);
$book = new Book($serviceMock);