Mockito:模拟方法参数

时间:2013-05-15 07:12:24

标签: java testing mocking

我正在使用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); 
    }

}

Mock for Child财产可以胜任。问题是我还想模拟childDetails.validate()(只有这个方法)并保留其他方法(getAge()必须返回20)。你能建议如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

为此,您应该使用spy。间谍是一个部分模拟,只会嘲笑你告诉它的各个方法。如果validate()void方法,则可以使用doNothing()方法作为间谍。使用方法如下:

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

可以找到关于此主题的更多阅读here