我正在使用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)。你能建议如何解决这个问题吗?
答案 0 :(得分:1)
为此,您应该使用spy
。间谍是一个部分模拟,只会嘲笑你告诉它的各个方法。如果validate()
是void
方法,则可以使用doNothing()
方法作为间谍。使用方法如下:
@Test
public testChildDetailsMethod(){
ChildDetailsSpy childSpy = spy(new ChildDetailsSpy());
doNothing().when(childSpy).validate();
childDetails.setAge(20);
...
}
可以找到关于此主题的更多阅读here。