Как сделать метод ThThrow или thenThrow, который возвращает void и вызывает исключение - PullRequest
0 голосов
/ 03 января 2019

У меня есть метод process, который возвращает void, а также может выдать исключение.Я хочу проверить, как ведет себя другой метод run при вызове process и обрабатывает исключение в случае его возникновения.

Я пытался использовать doThrow(), но он говорит: «Проверенное исключение недопустимо для этого»метод!».Затем я попытался использовать thenThrow(), но ему нужна не пустая функция.

Код:

public void run() {
    for (var billet : getBillets()) {
        try {
            process(billet);
            billet.status = "processed";
        } catch (Exception e) {
            billet.status = "error";
        }

        billet.update();
    }
}

public void process(Billet billet) throws Exception {
    var data = parse(billet.data); // may throw an exception
    var meta = data.get("meta"); // may throw an exception

    // ... more parsing ...

    new Product(meta).save();
    new Item(meta).save();

    // ... more operations ...
};

Тест:

var billet1 = new Billet();
var billet2 = new Billet();

doThrow(new Exception()).when(myInctance).process(billet2);
myInctance.run();
assertEquals("processed", billet1.status);
assertEquals("error", billet2.status);

// ... some checks ...

Я ожидаю тестбудет успешным.

1 Ответ

0 голосов
/ 03 января 2019

Это правильный способ сказать макету, чтобы он выдал исключение:

Mockito.doThrow(new SomeException()).when(mock).doSomething()

Как указал Халк в комментариях, это исключение должно соответствовать сигнатуре метода, в противном случае вы получите MockitoException("Checked exception is invalid for this method!")

Вы можете обойти это исключение, бросив какой-то тип RuntimeException.Наконец, вам следует избегать использования универсального Exception.Гораздо полезнее создать соответствующее именованное исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...