0

我正在使用 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)。你能建议如何解决这个问题吗?

4

1 回答 1

1

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

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

更多关于这个主题的阅读可以在这里找到。

于 2013-05-15T07:22:41.977 回答