【问题标题】:PhpUnit mock included class methodPhpUnit mock 包含的类方法
【发布时间】:2016-01-05 23:37:07
【问题描述】:

我有两个班级,ClassA,ClassB。在 ClassA 中,我有从 ClassB 调用方法的方法。 例如:

function functionInClassB($state)
{
  if ($state) {
    return true;
  } else {
    return false;
  }
}

function functionInClassA ()
{
  if (functionInClassB(1)) {
    return "Anything";
  }
}

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

【问题讨论】:

  • 我很困惑;你提到了类,但你的代码示例只包含函数(你不能在 PHPUnit 中模拟)。您的代码中的函数是类的成员吗?如果是这样,您是静态调用它们还是在该类的实例上调用它们?
  • 如果你测试functionInClassB(),你需要运行它。你的问题写错了吗?

标签: php testing mocking phpunit


【解决方案1】:

老问题,但我认为您指的是存根/模拟。

它有多容易/明智取决于。如果你想调用 functionInClassB 静态 那么你就不走运了;静态的东西不适用于测试。但是,如果您在 instance 上调用该方法,那么以下应该可以工作:

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);
  }
}

【讨论】:

    猜你喜欢
    • 2017-01-28
    • 2014-07-06
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多