Недавно в обзоре кода коллега сказал: «В тестах не должно быть блоков try-catch». Он также указал мне на информацию о ExpectedException
, и я смог использовать это, чтобы переписать некоторые из моих тестов, которые выполняли проверки данных исключения.
Однако я сталкиваюсь с ситуацией, когда я не уверен, что смогу устранить попытку-улов. Я пишу модульный тест для метода, который выдает исключение and и выполняет некоторое поведение, которое мне нужно проверить с помощью JMockit. Предположим, что тестируемый код содержит что-то вроде
try {
...code...
} catch (SomeException e) {
statusMessage.send("Failure", <parameters with some data>);
throw e;
}
Тест JUnit в настоящее время выглядит так
@Test
public void test() {
... set things up ...
try {
callTheMethod();
fail("No exception thrown");
} catch (Exception e) {
assertEquals(SomeException.class, e.getClass());
}
new Verifications() { {
statusMessage.send("Failure", <expected data>);
} }
}
Я не могу найти хороший способ избавиться от try-catch. Лично я не вижу проблемы в том, чтобы он был там, но если я хотя бы не попытаюсь избавиться от него, я, скорее всего, заразлюсь от него мой коллега :) :) :)
fail
и assertEquals
не нужны. Если есть простой способ сказать JUnit/JMockit просто игнорировать любое исключение из callTheMethod()
и продолжать, это было бы хорошо — я могу создать еще один тест для проверки исключения.
Есть ли какая-то функция JUnit или JMockit, которая позволила бы мне выполнить то, что я пытаюсь сделать?
[Примечание: отредактировано, чтобы прояснить, что поведение, которое я тестирую, является вызовом имитируемого объекта, а не вызовом статического метода. Это действительно не имеет отношения к вопросу.]
assertEquals(..
вы могли бы потенциально поместить частьnew Verification
в блок catch, а затемthrow e
. Не стал бы беспокоиться лично, потому что вас интересует не только исключение, но и то, что происходит между ними, и это просто не стандартный ожидаемый тест исключения. - person zapl   schedule 18.11.2015