2013-05-15 6 views
0

Я использую структуру Mockito для тестирования. Теперь у меня возникает следующая проблема.Mockito: параметр mock method

Это класс, который я хочу проверить.

@Service 
public class Parent{ 

    @Autowired 
    private Child child; 

    public void setChildDetails(ChildDetails childDetails){ 
     childDetails.validate(); 
     .... 
     int age = childDetails.getAge(); 
    } 

} 

Это мой тест.

public class ParentTest { 

    @InjectMocks 
    private Parent parent; 

    @Mock 
    private Child child; 

    @Before 
    public void setup() { 
     initMocks(this); 
    } 

    @Test 
    public testParentMethod(){ 
     ..... 
    } 

    @Test 
    public testChildDetailsMethod(){ 
     ChildDetails childDetails = new ChildDetails(); 
     childDetails.setAge(20); 
     parent.setChildDetails(childDetails); 
    } 

} 

Mock for Child собственность выполняет свою работу. Проблема в том, что я хочу также высмеять childDetails.validate() (только этот метод) и оставить другие методы вроде них (getAge() должен вернуть 20). Можете ли вы предложить, как решить эту проблему?

ответ

1

Для этого вы должны использовать spy. Шпион является частичным макетом и будет только издеваться над отдельными методами, о которых вы говорите. Если validate() - это метод void, вы можете использовать метод doNothing() для шпиона. Используйте его, как показано ниже:

@Test 
    public testChildDetailsMethod(){ 
     ChildDetailsSpy childSpy = spy(new ChildDetailsSpy()); 
     doNothing().when(childSpy).validate(); 
     childDetails.setAge(20); 
     ... 
    } 

Подробная информация по этому вопросу можно найти here.

+0

спасибо. Это именно то, что мне нужно. – mvb13

+1

Рад, что я мог помочь. Пожалуйста, поддержите и примите ответ, нажав на кнопки влево, если это было полезно, и перенесла вашу проблему :) –