当被绑定的方法最初不存在时,PHPUnit失败

时间:2015-05-27 18:57:38

标签: php mocking phpunit stubbing

如果被存根的方法最初不存在于被存根的类中,有没有办法让PHPUnit抛出异常?

这是一个粗略的例子:

class User {

  function getId() { ... }
}
class LoginTest extends PHPUnit_Framework_TestCase {

  function testLogin() {
    ...
    $userMock = $this->getMockBuilder('User')
                     ->setMethods(['getID']) // getId is misspelled; error should occur
                     ->getMock();
    ...
  }
}
class Login {

  function login($user) {
    ...
    $id = $user->getID(); // tests will pass even though this is misspelled
    ...
  }
}

2 个答案:

答案 0 :(得分:2)

@Schleis是对的,你不能直接在PHPUnit中这样做。 但是从PHPUnit 4.5开始,你可以使用Prophecy来创建测试双打。预言不会容忍这种行为。您将无法使用它来模拟不存在的方法。

答案 1 :(得分:1)

不,你不能。

PHPUnit不需要让类可用于模拟它。你甚至可以设置模拟不使用任何自动加载。发生这种情况时,PHPUnit会动态创建一个假类。这个假类没有任何定义的方法会导致抛出异常,导致测试套件失败。

由于正在测试的代码存在问题,您的测试应该会失败。模拟的问题超出了测试范围。您的示例中的问题将在您的功能测试期间被捕获。

在拼写错误的功能和尚未实现的功能之间确实没有简单的方法。