我想对一个调用其中的另一个函数B的函数A做一个phpUnit测试,如何替换函数B的返回来继续我的测试成功
public function A($parameter = null){
// do something
$response_B = $this->B();
// continue with the function A
}
注意:函数B在SQL中对数据库进行查询。在我的测试中我不想做任何查询,只是我想预先定义函数B的结果。 我曾尝试使用Mocks和Stubs,但实际上我并不完全理解它。 抱歉我的英文
答案 0 :(得分:0)
功能示例:
function pass(){
$test = check(3);
return $test; //returns true when 3 is parameter used to call function check()
}
function check($int) {
if ($int == 3) {
return true;
} else {
return false;
}
答案 1 :(得分:0)
所以你想要的,称为“Mocking”,这不适用于简单的功能。
使其简单。(代码未经过测试)
class MySpecialClass
{
public function doSomeSpecialThings(){
$response = $this->doFancySQL();
return $response;
}
}
所以如果你想操纵方法调用,你必须将它提取到外部类并注入它
class MySpecialClass
{
public function setFancySqlInterface(FancySqlInterface $fancySqlInterface){
$this->fancySqlInterface = $fancySqlInterface;
}
public function doSomeSpecialThings(){
$response = $this->fancySqlInterface->doFancySQL();
return $response;
}
}
有了这个,现在你可以在测试中使用方法setFancySqlInterface
和一个返回特定响应的假类。
您可以为此任务创建假类或使用“模拟框架”
作为一个例子,你可以在这里看到
https://github.com/BlackScorp/guestbook/blob/master/tests/UseCase/ListEntriesTest.php#L35我创建假实体并将它们添加到Fake存储库https://github.com/BlackScorp/guestbook/blob/master/tests/UseCase/ListEntriesTest.php#L70
希望你理解我的意思:D