2017-01-04 7 views
0

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

public void doSomething(){ 
    try 
    { 
     // Do something 
    } 
    catch (RejectedExecutionException ex) 
    { 
     // just add some metrics here, no big action 
    } 
} 

я пишу тест для случая метания RejectedExecutionException, но исключение не выбрасывается, что означает, что я не могу использовать ExpectedException. Итак, как я должен проверить это исключение, вызывается один раз с помощью EasyMock?

+1

Что означает u, потому что 'исключение не выбрасывается окончательно' – Abhishek

+0

@Abhishek означает не бросать исключение после улова – michael

ответ

1

Я не думаю, что у вас есть чистый способ сделать это с помощью любой структуры макета. Однако я могу предложить вам следующие решения.

Решение 1

Изменить вам код doSomething() следующим образом:

public void doSomething(){ 
    try 
    { 
     doSomethingImpl(); // throws RejectedExecutionException 
    } 
    catch (RejectedExecutionException ex) 
    { 
     // just add some metrics here, no big action 
    } 
}. 

Теперь осуществить испытание для обоих doSomethingImpl(), который должен бросить исключение и doSomething(), которые не должны с теми же входными данными и состояния.

Решение 2

Вы ловите код делает что-то, не так ли? Например, звонки log.error(). Вы можете убедиться, что конкретный вызов действительно произошел и произошел только один раз. Я не помню специфический синтаксис для этого с EasyMock, но с Mockito это очень просто: используйте Mockito.verify().

Решение 3 Вы можете использовать PowerMock для проверки того, был вызван конструктор исключения. Это не очень чисто, потому что теоретически вы можете создать экземпляр исключения, но не бросать его, но лучше, чем ничего.

Возможно, вы даже можете объединить эти решения. Однако я считаю, что первое - лучшее.

0

Участок Do something вызывает ложный выброс исключения?

Если да, то просто сделать expect(mock.methodCalled()).andThrow(new RejectedExecutionException());

И затем EasyMock.verify(mock) в конце теста. Это позволит убедиться, что methodCalled был вызван один раз и только один раз.