PhpUnit模拟包含类方法


PhpUnit mock included class method

我有两个班,a类,b类。在类a中,我有从类b调用方法的方法。例如:

function functionInClassB($state)
{
  if ($state) {
    return true;
  } else {
    return false;
  }
}
function functionInClassA ()
{
  if (functionInClassB(1)) {
    return "Anything";
  }
}

现在,我想用PhpUnit测试functionclasassb,我不想让functionclasassb运行。我想要我想要的返回值。对不起,我的英语不好,请帮忙!!

老问题,但我想你指的是存根/嘲弄。

是否容易/明智取决于。如果你想静态地调用functionInClassB ,那么你就不走运了;静态内容不适合测试。但是如果你在实例上调用该方法,那么下面的代码应该可以工作:

class A {
  protected $instanceOfB;
  public function functionInClassA(B $injectedInstanceOfB) {
    if ($injectedInstanceOfB->functionInClassB(1)) return 'anything';
  }
}
class B {
  public function functionInClassB($state) {
    if ($state) {
      return true;
    } else {
      return false;
    }
  }
}
class yourPHPUnitTest extends 'PHPUnit'Framework'TestCase {
  public function testA() {
    $stubOfB = $this->createStub('B::class);
    // Optionally...
    $stubOfB->method('functionInClassB')->willReturn('something');
    // Thing you want to test
    $a = new A();
    $result = $a->functionInClassA($stubOfB);
    $this->assertEqual('something', $result);
  }
}