Я пытаюсь использовать свои первые функции с помощью Behat, и я столкнулся с проблемой, я не знаю, как реализовать ожидаемые исключения.Как реализовать ожидаемые исключения?
Я нашел проблему https://github.com/Behat/Behat/issues/140, и robocoder говорит об одном возможном способе, который также используется Бехатом. Но похоже, что они не справляются с исключениями.
Моя цель - добиться принудительной обработки исключений. Я не хочу, чтобы какая-либо конструкция ловила все исключения и забывала их.
Одним из возможных путей было бы:
When <player> transfers <transfer> from his account it should fail with <error>
Реализация
try {
...
} catch (\Exception $ex) {
assertEquals($error, $ex->getMessage());
}
Мне не нравится описание сценария. Я хочу использовать ключевое слово , а затем.
When <player> transfers <transfer> from his account
Then it should fail with error <error>
Это описание имеет тот недостаток, мне нужно два метода:
method1($arg1, $arg2) {
// Test the transfer
}
method2($arg1, $arg2) {
// Check if the exception is the right one
}
Чтобы быть в состоянии проверить в method2 необходимо хранить исключение.
Единственный возможный способ, который я вижу, - использовать try/catch и сохранить его в переменной.
Кто-то другой поймает его и ничего не сделает с этим. Никто не заметит при проведении тестов.
Как я могу предотвратить исключение этих исключений?
Внедрил ли кто-нибудь другой подобный сценарий?
Спасибо за любые подсказки.
EDIT:
Behat контекст:
playerTransfer($player, $amount) {
$player->transfer($amount);
}
метод из класса сущностей:
transfer($amount) {
if ($this->getWealth() < $amount) {
throw NotEnoughMoney();
}
...
}
Как вы обрабатывать исключения, брошенные * переводов со своего счета * ? См. Вторую часть моего вопроса. –
CSchulz
он не должен бросать исключение, исключение должно быть выбрано в «Then i should ...». Можете ли вы опубликовать некоторую псевдо-реализацию? –
Добавлена некоторая реализация. Извините за поздний ответ. – CSchulz