Ошибка PHPUnit, когда метод, о котором идет речь, не существует изначально

Есть ли способ заставить 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

Решение

@Schleis прав, что вы не можете сделать это в PHPUnit напрямую.
Но с PHPUnit 4.5 вы можете использовать Prophecy для создания двойников теста. Пророчество не потерпит такого поведения. Вы не сможете издеваться над несуществующим методом.

1

Другие решения

Нет, ты не можешь.

PHPUnit не должен иметь класс, доступный, чтобы высмеивать его. И вы даже можете установить макет, чтобы не использовать автозагрузку. Когда это происходит, PHPUnit создает фальшивый класс на лету. В этом фальшивом классе нет определенных методов, которые могли бы вызвать исключение, если ваш набор тестов не прошел.

Ваши тесты должны провалиться из-за проблем с кодом, который тестируется. Проблемы с макетом выходят за рамки вашего теста. Проблема в вашем примере будет обнаружена во время функционального тестирования.

На самом деле не существует простого способа отличить функцию с ошибкой от функции, которая еще не была реализована.

0

По вопросам рекламы [email protected]