2014-10-17 3 views
1

У меня есть метод DAO.Easymock ожидает исключения?

public String getMsg(String name){ 

//get data from database 
    if db returned value is null then throw exception. 

if(returnValue == null){ 
    throw new CustomException("No results"); 
} 

return returnValue; 
} 

Мне нужно написать пример ожидаемого сценария исключения, как показано ниже. Как я могу писать?

+0

Хотите ли вы, чтобы проверить этот метод DAO или класс который использует этот метод? – ponomandr

+0

Я хочу проверить класс, который использует этот DAO. Я хочу издеваться над этим DAO в классе Service. – user755806

ответ

2

Если String getMsg(String name) является метод интерфейса, а затем:

public interface IMsgDAO 
{ 
    // ... 
    String getMsg(String name); 
    // ... 
} 

В UT

IMsgDAO dao = EasyMock.createMock(IMsgDAO.class); 
EasyMock.expect(dao.getMsg((String) EasyMock.anyObject()) 
    .andThrow(new CustomException()) // <--- 
    .anyTimes(); 

Теперь звонить из dao.getMsg("anyString") выбросит исключение,

0

Вы издеваетесь над подключением базы данных и записываете два тестовых примера. Один, в котором вы сообщаете обманутому соединению с возвратом null, в котором вы ожидаете исключение (@Test (expect = CustomException.class)), и тот, в котором издеваемое соединение возвращает фиктивный результат, и тест не терпит неудачу, поскольку нет исключения.

На стороне примечания, я думаю, что включение логики проверки в ваш DAO нарушает принцип единой ответственности. На мой взгляд, либо базовое соединение с базой данных должно генерировать исключение, либо вы должны отделить логику проверки и поместить его в метод проверки правильности (? ToValidate), который должен выдать исключение, если параметр недействителен.

+0

Привет, Даниэль, я хочу высмеять метод DAO и тестирования, который использует этот метод DAO. – user755806

+0

Затем http://stackoverflow.com/a/26422113/2921283 находится на месте. На стороне примечания: вам необязательно нужен интерфейс для издевательства над объектом, но есть две ошибки: вы не можете издеваться над статическими и конечными, и помните, когда вы используете матчи в определении поведения mocks: вы не можете смешивать матчи и регулярные параметры. Также вам нужно «переписать (...)» между определением поведения (фазой записи) и тестированием. –

Смежные вопросы