2016-04-29 13 views
0

Я хотел бы написать тест JUnit, утверждающий исключение. В моем случае, мое ожидание ловит DataAccessException. Однако DataAccessException является абстрактным классом, и мой код может генерировать любой конкретный класс, который распространяется на DataAccessException.EasyMock: исключение, утверждающее любой класс в иерархии

Это мой код, используя правило JUnit:

@Rule 
public final ExpectedException exception = ExpectedException.none(); 

@Test 
public void testDelete_fail() { 
    EasyMock.expect(testSubject.delete(EasyMock.anyObject())) 
      .andThrow(new DataAccessException("...")); 

    exception.expect(DataAccessException.class); 
    testSubject.delete(id);   
} 

Как вы знаете, я не могу создать новый экземпляр абстрактного класса. Это означает, что я не могу заполнить аргумент метода andThrow. Если я пытаюсь построить с DuplicateKeyException, который один простирается от DataAccessException, я получил сообщение об ошибке:

AssertionError: Expected test to throw an instance of org.springframework.dao.DataAccessException 

Любые идеи ?, я предпочел бы что-то с помощью EasyMock. Благодаря

Hierarchy of DataAccessException

ответ

0

Простой трюк будет createNiceMock(DataAccessException.class). Но на самом деле, также будет работать new DataAccessException("...") {}.

+0

Привет, я пробовал использовать EasyMock.createNiceMock (DataAccessException.class), но я получил еще одну ошибку (NoSuchMethodError: org.hamcrest.Matcher.describeMismatch (Ljava/lang/Object; Lorg/hamcrest/Description;) V). То, что временно устранило мою проблему, было создание нового экземпляра DataIntegrityViolationException. Моя ключевая проблема заключалась в том, что я забыл называть EasyMock.replay. Кстати, спасибо за ваш ответ – jmgoyesc