我对测试很陌生。我有一个webapp,可以存储有关书籍的书籍和信息。
如果我调用我的路线sigprocmask(SIG_BLOCK, &newmask, &oldmask)
,它会触发我的HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(url));
request.Method = WebRequestMethods.Http.Get;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
String responseString = reader.ReadToEnd();
response.Close();
方法并在我的数据库中创建一本新书。这是简化的方法:
/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.
}
如何在不向goodreads发出http请求的情况下测试此内容?我需要验证语言是否在数据库中。我可以使用BookService.php
的灯具。但是我如何能够存根/模拟(我不知道正确的术语)这个功能呢?
我使用的是Laravel和PHPUnit。
答案 0 :(得分:0)
你需要的就是这个 - 存在BookService类。但是,由于你直接实例化它,它就不会那么容易存根。您应该将它注入到Book类中,这样您就可以在测试中注入一个存根(通过构造函数注入或通过提供一个setter来覆盖$ this-> bookService)。
典型设置如下:
$serviceMock = $this->getMock('BookService');
$serviceMock->method('fetchLanguages')->willReturn(<some hard-coded-result-here>);
$book = new Book($serviceMock);