Тестирование несчастливого пути может быть трудным. Вот отличный способ, который я нашел с огурцом.
Scenario: Doing something illegal should land you in jail
Then a failure is expected
When you attempt something illegal
And it fails.
Хорошо, не стреляйте в меня, потому что я поставил Then
перед When
, я просто думаю, что это лучше, но вам не нужно этого делать.
Я храню свои исключения в мировом объекте (с огурцом), но вы также можете сделать это в своем пошаговом файле, но это ограничит вас позже.
public class MyWorld {
private boolean expectException;
private List<RuntimeException> exceptions = new ArrayList<>();
public void expectException() {
expectException = true;
}
public void add(RuntimeException e) {
if (!expectException) {
throw e;
}
exceptions.add(e);
}
public List<RuntimeException> getExceptions() {
return exceptions;
}
}
Тогда ваши шаги довольно просты:
@Then("a failure is expected")
public void a_failure_is_expected() {
myWorld.expectException();
}
На этапе, когда вы (по крайней мере, иногда) ожидаете исключения, поймайте его и добавьте в мир.
@When("you attempt something illegal")
public void you_attempt_something_illegal() {
try {
myService.doSomethingBad();
} catch (RuntimeException e) {
world.add(e);
}
}
Теперь вы можете проверить, зафиксировано ли исключение в мире.
@And("it fails")
public void it_fails() {
assertThat(world.getExceptions(), is(not(empty()));
}
Самое ценное в этом подходе - то, что он не принимает исключение, когда вы этого не ожидаете.
person
Niel de Wet
schedule
03.04.2014