JUnit / TestNg: Как упростить / объединить несколько {try fail () catch} для одного и того же исключения? - PullRequest
1 голос
/ 12 августа 2011

Пример (<Expected Exception> для assert 1 & assert 2 - то же самое):

@junit.framework.Test // or @org.testng.annotations.Test
public void testCase() {
    try {
        // assert 1
        fail();
    } catch (<Expected Exception>) {

    }

    try {
        // assert 2
        fail();
    } catch (<Expected Exception>) {

    }
}

Ответы [ 4 ]

2 голосов
/ 12 августа 2011

Если вы любите приключения, вы также можете попробовать assertThrows:

https://github.com/dsaff/junit.contrib

Не стесняйтесь спрашивать, есть ли у вас проблемы.

1 голос
/ 12 августа 2011

Вам, вероятно, следует разбить ваш метод на два отдельных метода, каждый из которых будет выдавать:

@Test(expectedExceptions = NullPointerException.class)
public void testCase1() {
  // assert 1
}


@Test(expectedExceptions = NullPointerException.class)
public void testCase2() {
  // assert 2
}
1 голос
/ 12 августа 2011

Если слишком сложно разбить это на отдельные методы тестирования, вот что работало для меня в прошлом.

Создайте метод expectsException(), который ожидает Callback.

interface Callback {
    void call() throws Exception;
}

void expectsException(Callback callback) {
    try {
        callback.call();
        fail("ExpectedException was not thrown!");
    } catch (Exception e) {
        if (!(e instanceof ExpectedException)) {
            fail("Expecting ExpectedException, got " + e.getClass());
        }
        assertEquals("Expected exception message", e.getMessage());
    }
}

Затем оберните код внутри ваших try {...} catch блоков в Callback:

@Test
public void testSomething() {
    expectsException(new Callback() {
        public void call() throws Exception {
            // assert 1
        }
    });

    expectsException(new Callback() {
        public void call() throws Exception {
            // assert 2
        }
    });
}

Обратите внимание, однако, что в зависимости от того, что вы делаете в блоке catch, это можетили может не оказаться менее многословным, чем прямолинейный try {...} catch.

(Когда Java получит правильное замыкание, этот подход будет иметь гораздо больше смысла.)

0 голосов
/ 22 июня 2012

catch-исключение может помочь:

public void testCase() {
    // assert 1
    verifyException(obj, MyException.class).do(1);
    // assert 2
    verifyException(obj, MyException.class).do(2);
}
...