【问题标题】:PHPUnit Fail When Method Being Stubbed Does Not Originally Exist当被存根的方法最初不存在时 PHPUnit 失败
【发布时间】:2015-08-10 00:54:45
【问题描述】:

如果被存根的方法最初不存在于被存根的类中,有没有办法让 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
    ...
  }
}

【问题讨论】:

    标签: php mocking phpunit stubbing


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      不,你不能。

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

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

      确实没有一种简单的方法可以区分拼写错误的函数和尚未实现的函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-03
        • 1970-01-01
        • 2017-01-28
        • 2015-01-15
        • 2019-05-27
        • 2011-09-10
        • 2015-04-09
        相关资源
        最近更新 更多