测试父方法时,存根子方法失败

时间:2019-06-15 16:10:35

标签: php mocking

在下面的示例中,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=====');        
  }

1 个答案:

答案 0 :(得分:0)

已将self::更改为static::

  public static function parentFunc() {
    $data = static::loadTargets();
    codecept_debug($data); // 17
    return $data;
  }

When to use self over $this?

  

请勿使用self ::,请使用static ::

     

自我的另一方面::值得一提。烦人的   self ::指定义时的范围而不是指该范围   执行。