2013-05-15 234 views
0

我正在使用Mockito框架進行測試。現在我遇到以下問題。Mockito:模擬方法參數

這是我想測試的類。

@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); 
    } 

} 

模擬兒童財產完成其工作。問題是我還想模擬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

很高興我能幫到你。請點擊左邊的按鈕,以獲得答案並接受答案,如果它有幫助並且解決了您的問題:) –