2013-05-15 86 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

很高兴我能帮到你。请点击左边的按钮,以获得答案并接受答案,如果它有帮助并且解决了您的问题:) –