Как я могу проверить свои частные конструкторы, которые выдают исключение - PullRequest
0 голосов
/ 19 января 2019

Я хотел бы знать, как я могу проверить свои частные конструкторы, которые генерируют исключение IllegalStateException, я нашел и нашел что-то вроде этого:

@Test
public void privateConstructorTest()throws Exception{
    Constructor<DetailRecord> constructor = DetailRecord.class.getDeclaredConstructor();
    assertTrue(Modifier.isPrivate(constructor.getModifiers()));
    constructor.setAccessible(true);
    constructor.newInstance();
}

и это конструктор:

private DetailRecord(){
    throw new IllegalStateException(ExceptionCodes.FACTORY_CLASS.getMessage());
}

тест работает, если конструкторы не выдают исключение

1 Ответ

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

Добавьте необязательный ожидаемый атрибут к аннотации @ Test .Следуя тесту, который проходит, когда ожидается ожидаемое IllegalStateException :

@Test(expected=IllegalStateException.class)
public void privateConstructorTest() {
    Constructor<DetailRecord> constructor = DetailRecord.class.getDeclaredConstructor();
    assertTrue(Modifier.isPrivate(constructor.getModifiers()));
    constructor.setAccessible(true);
    constructor.newInstance();
}

Или вы можете перехватить исключение и проверить его следующим образом:

@Test
public void privateConstructorTest() {
    Constructor<DetailRecord> constructor = DetailRecord.class.getDeclaredConstructor();
    assertTrue(Modifier.isPrivate(constructor.getModifiers()));
    constructor.setAccessible(true);
    Throwable currentException = null;
    try {
        constructor.newInstance();
    catch (IllegalStateException exception) {
        currentException = exception;
    }
    assertTrue(currentException instanceof IllegalStateException);
}
...