как проверить на нелегальное исключение доступа? - PullRequest
0 голосов
/ 23 марта 2012

Редактировать: я хочу написать неудачный тестовый пример, а не положительный.

Я пишу тестовые примеры для своего кода Java. Как мне написать тестовые примеры для методаиспользует отражение API.Полученный код дает мне IllegalAccessException.Как мне создать сценарий в моем тестовом примере JUnit, чтобы я мог проверить исключение.

public double convertTo(String currency, int amount) {
    Class parameters[] = {String.class, int.class};
    try {
        Method classMethod = clazz.getMethod("convertTo", parameters);
        return ((Double) classMethod.invoke(exhangeObject, new Object[]{currency, amount})).doubleValue();
    } catch (NoSuchMethodException e) {
        throw new CurrencyConverterException();
    } catch (InvocationTargetException e) {
        throw new CurrencyConverterException();
    } catch (IllegalAccessException e) {
        System.out.println(e.getClass());
        throw new CurrencyConverterException();
    }
}

Спасибо, Шрирам

1 Ответ

4 голосов
/ 23 марта 2012

Поскольку отражение - это деталь реализации тестируемого метода, вам не нужно специально его обслуживать. Чтобы проверить этот метод, просто выполните:

@Test
public void shouldNotThrowException() throws Exception {
    testSubject.convertTo("JPY", 100);
}

Если выброшено CurrencyConverterException, ваш тест не пройден.

Или, больше простоты:

@Test
public void shouldNotThrowException() {
    try {
        testSubject.convertTo("JPY", 100);
    } catch(CurrencyConverterException e) {
        fail(e.getMessage());
    }
}

Обратите внимание: когда вы ловите исключение и выбрасываете новое, вы всегда должны связывать исходное исключение в новом. Например:

 } catch (IllegalAccessException e) {
     throw new CurrencyConverterException(e);
 }

Редактировать : Вы ищете этот шаблон вместо? Как гарантировать, что исключение выдается. Два варианта:

// will pass only if the exception is thrown
@Test(expected = CurrencyConverterException.class)
public void shouldThrowException() {
    testSubject.doIt();
}

или

@Test
public void shouldThrowException() {
    try {
        testSubject.doIt();
        fail("CurrencyConverterException not thrown");
    } catch (CurrencyConverterException e) {
        // expected
        // use this variant if you want to make assertions on the exception, e.g.
        assertTrue(e.getCause() instanceof IllegalAccessException);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...