如果被存根的方法最初不存在于被存根的类中,有没有办法让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
...
}
}
答案 0 :(得分:2)
@Schleis是对的,你不能直接在PHPUnit中这样做。 但是从PHPUnit 4.5开始,你可以使用Prophecy来创建测试双打。预言不会容忍这种行为。您将无法使用它来模拟不存在的方法。
答案 1 :(得分:1)
不,你不能。
PHPUnit不需要让类可用于模拟它。你甚至可以设置模拟不使用任何自动加载。发生这种情况时,PHPUnit会动态创建一个假类。这个假类没有任何定义的方法会导致抛出异常,导致测试套件失败。
由于正在测试的代码存在问题,您的测试应该会失败。模拟的问题超出了测试范围。您的示例中的问题将在您的功能测试期间被捕获。
在拼写错误的功能和尚未实现的功能之间确实没有简单的方法。