2015-12-31 2 views
0

В School классе, у меня есть start() функцию, вызывающие другая функция doTask():Ложные/Заглушка RuntimeException в единичном испытании

pubic class School { 
    public void start() { 
     try { 
     doTask(); 
     } catch(RuntimeException e) { 
      handleException(); 
     } 
    } 
    private void doTask() { 
     //Code which might throw RuntimeException 
    } 
} 

Я хочу модульное тестирование start() с RuntimeException:

@Test 
public void testStartWithException() { 
    // How can I mock/stub mySchool.start() to throw RuntimeException? 
    mySchool.start(); 
} 

It не легко для моего кода реализации бросить RuntimeException, как я могу сделать тестовый код, чтобы высмеять RuntimeException & бросить его?

(Кроме чистого JUnit, я рассматриваю с помощью Mockito, но не знает, как бросить RuntimeException)

+0

Возможный дубликат [Mockito проверить метод недействительным сгенерирует исключение] (http://stackoverflow.com/questions/15156857/mockito-test-a-void-method-throws-an- исключение) – RAnders00

+1

Почему doTask() выдает исключение? Если это из-за плохих входов, просто используйте плохие входы в тесте. Если это связано с взаимодействием со службой, которая имеет непредвиденную проблему, вам нужно высмеять или закрыть эту службу, чтобы она выбрала исключение для имитации проблемы. –

ответ

2
@Test 
public void testStartWithException() { 
    // How can I mock/stub mySchool.start() to throw RuntimeException? 
    when(mySchool.start()).thenThrow(new RuntimeException("runtime exception")); 
} 

Вы можете использовать when с thenThrow бросить исключение.

+0

Я не думаю, что start() - это метод, который должен вызывать исключение. –

0

Вы можете использовать PowerMockito, чтобы высмеять частный метод, чтобы выбросить RuntimeException. Что-то вроде этого:

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.powermock.core.classloader.annotations.PrepareForTest; 
import org.powermock.modules.junit4.PowerMockRunner; 

import static org.powermock.api.mockito.PowerMockito.doThrow; 
import static org.powermock.api.mockito.PowerMockito.spy; 

@RunWith(PowerMockRunner.class) 
@PrepareForTest(School.class) 
public class SchoolTest { 

    @Test 
    public void testStartWithException() throws Exception { 
     School school = spy(new School()); 

     doThrow(new RuntimeException()).when(school, "doTask");  

     school.start(); 
    } 
} 
+0

Это больше похоже на ответ, который ищет Leem.fin, но всякий раз, когда вы должны использовать Powermockito вместо Mockito, это может быть признаком того, что дизайн может быть улучшен. –

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