2015-10-19 4 views
0

Итак, я новичок в Mockito для тестирования фасадов. Поэтому в основном я хочу проверить, будет ли метод службы однажды вызван.Mockito - Доступ к закрытым полям для проверки()

Здесь будет упрощенный пример

Моя_служба

public class Service { 
    public int myMethod(int index, int number) { 
     if (index<4){ 
      index = index + number; 
     } 
     return index; 
    } 
} 

Мои Фасад:

public class Facade { 

    private Service service; 

    public void method(){ 
     int i = service.myMethod(4, 2); 
    } 

} 

и, наконец, мой тест:

public class FacadeTest { 
    @InjectMocks 
    private Facade classUnderTest; 

    @Mock (name="service") 
    private Service service; 

    @Before 
    public void setUp(){ 
     MockitoAnnotations.initMocks(this); 
    } 

    @Test 
    public void test(){ 
     verify(classUnderTest, times(1)).service.myMethod(4,2); 
    } 
} 

Я знаю, что это возможно использовать Get ter/Setter-methods в моем Facade, чтобы вернуть Сервис, но я хочу сделать это, не делая этого.

Возможно ли, как я хочу, без каких-либо изменений на Фасад?

И есть ли разница, когда у меня есть проект Spring и используется @Autowired для служебной переменной внутри фасада?

Спасибо!

+1

Замените 'classUnderTest' в методе тестирования' service' и сделайте это. Вы можете только проверять вызовы на mock, а не на тестируемый класс (поскольку это не контролируется Mockito). –

+1

Вам не нужен какой-либо приемник, так как служба, которая вводится и используется фасадом, является «частной службой сервиса». Таким образом, вы имеете доступ к нему и можете проверить, вызван ли его метод. –

ответ

0

Использование @InjectMocks вставляет ваш аннотированный сервис @Mock на вашем фасаде. Вам не нужен какой-либо приемник или сеттер для вашего теста.

Кажется, вы забыли вызвать метод в своем тесте. Попробуйте с этим:

@Test 
public void test(){ 
    classUnderTest.method(); 
    verify(service, times(1)).service.myMethod(4,2); 
} 

Использование @Autowired службы в вашем фасаде не будет иметь никакого влияния на тесте, так как пружина в ней не используется. Весна будет вводить правильный компонент, когда вы запустите приложение.

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