在下面的示例中,loadTargets()
在直接调用时正确返回其分配的存根值。但是,当在父方法中使用self::
进行调用时,它将尝试运行实际的,非存根的方法并失败。
有没有一种方法可以使其与直接调用时相同?我认为部分模拟可以做到这一点。
public function testQueryDbForNewSelection() {
$adminUtilitiesMock = Mockery
::mock('AdminUtilities[loadTargets]');
$adminUtilitiesMock
->shouldReceive('loadTargets')
->andReturn(17);
codecept_debug($adminUtilitiesMock::loadTargets()); // 17
codecept_debug($adminUtilitiesMock->parentFunc()); // [PHPUnit\Framework\Exception] Undefined index: limit
}
也尝试过:(相同错误)
public function testQueryDbForNewSelection() {
$adminUtilitiesMock = Mockery
::mock('AdminUtilities')
->makePartial();
$adminUtilitiesMock
->shouldReceive('loadTargets')
->andReturn(17);
还有:
codecept_debug($adminUtilitiesMock::parentFunc()); // [PHPUnit\Framework\Exception] Undefined index: limit
这里是2个方法声明。我期望的行为是在loadTargets()
内部调用期间,17
被存根值parentFunc()
忽略并覆盖。
public static function loadTargets() {
global $wpdb;
$query = $wpdb->get_results(
"select * from {$wpdb->prefix}fvc
limit {$_POST['limit']}
offset {$_POST['resultMarker']}
");
return $query;
}
public static function parentFunc() {
$data = self::loadTargets();
codecept_debug($data); // does not print to console, probably due to crashing out on the above line
codecept_debug('=====$data=====');
}
答案 0 :(得分:0)
已将self::
更改为static::
public static function parentFunc() {
$data = static::loadTargets();
codecept_debug($data); // 17
return $data;
}
请勿使用self ::,请使用static ::
自我的另一方面::值得一提。烦人的 self ::指定义时的范围而不是指该范围 执行。