2014-10-29 6 views
1

Я пишу серию тестов для класса с несколькими методами, такими как:Junit тест с autowired полого

public ServiceResponse getListOfGroups() { 
    ServiceResponse serviceResponse = new ServiceResponse(); 
    try{ 
     Slf4JStopWatch sw = new Slf4JStopWatch("GetListOfGroups", log, DEBUG_LEVEL); 
     List<Group> Groups = Arrays.asList(restTemplate.getForObject(getGroupServiceURL(), Group[].class)); 
     sw.stop(); 
     serviceResponse.setData(Groups); 
    } catch(ServiceException ex) { 
     serviceResponse.setErrorObject(ex.getErrorObject()); 
    } 

    return serviceResponse; 
} 

Проблемой я имею то, что restTemplate является @autowired от фактической реализации класс (и, следовательно, возвращает нуль при вызове в перспективе модульного теста). Как я могу написать правильный тестовый пример для этих методов?

Вот что я пытался до сих пор:

@Test 
public void testGetListOfGroups() { 
    //TODO 
    ServiceResponse resp = new ServiceResponse(); 
    Mockito.when(uwsci.getListOfGroups()).thenReturn(resp); //uwsci is my mocked object 
    assertTrue(uwsci.getListOfGroups() == resp); 
} 

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

+0

Покажите нам, как autowired поля. Используете ли вы инъекцию полей, инъекцию конструктора или инъекцию сеттера? –

+0

@JBNizet Используется полевая инъекция. '@Autowired \t частный RestTemplate restTemplate;' –

ответ

5

Поскольку вы выбрали инъекцию в поле, единственный способ впрыснуть ложную зависимость в ваш объект - использовать отражение. Если вы использовали инъекции конструктора вместо этого, он будет столь же легко, как

RestTemplate mockRestTemplate = mock(RestTemplate.class); 
ClassUnderTest c = new ClassUnderTest(mockRestTemplate); 

К счастью, Mockito делает это возможным использование его аннотации поддержки:

@Mock 
private RestTemplate mockRestTemplate; 

@InjectMocks 
private ClassUnderTest classUnderTest; 

@Before 
public void prepare() { 
    MockitoAnnotations.initMocks(this); 
} 
+0

Это сработало нормально. Я думаю, что теперь я работаю в кругах, так как кажется, что мне все равно нужно издеваться над ответом ('restTemplate.getForObject (getGroupServiceURL(), UWLevel []. Class)'). Это ответ на мой вопрос, хотя, спасибо. –

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