我在junit测试类中使用mockito框架。
以下是类的依赖关系图:
首先依赖于Second,Second依赖于Third和Fourth。
我想测试First class。在我的测试课中,我模拟了Second的实例。现在我想,对于第二类的模拟实例,第二类的所有字段也应该被模拟,即第二类的模拟实例应该模拟第三和第四类的实例(第二类有两个字段第三和第四)。
在下面的测试类中,我想要模拟的Second实例应该在其中模拟第三和第四实例。
public class FirstTest {
@Mock
private Second second;
@Mock
private Third third;
@Mock
private Fourth fourth;
@InjectMocks
private First first = new First();
@BeforeClass
public void setUp() throws Exception {
initMocks(this);
}
@Test
public void testCallSecond() throws Exception {
first.callSecond();
}
}
public class First {
@Autowired
private Second second;
public void callSecond() {
second.call();
}
}
public class Second {
@Autowired
Third third;
@Autowired
Fourth fourth;
public void call() {
System.out.println("third instance ======="+third);
third.call();
}
}
是否可以模拟二级模拟对象的所有字段?如果是,请建议。我想只使用Mockito框架来做。
答案 0 :(得分:3)
使用模拟框架删除瞬态依赖。
这意味着在测试First
时你会模拟Second
,这样做会切断所有进一步的依赖关系。
在您的测试中,您验证您的测试代码(剪切)Firlst
是否在其依赖项上调用了预期的方法,并根据为模拟的模拟配置的返回值调整了预期的参数和/或剪切的输出Second
答案 1 :(得分:3)
您正在通过模拟First
来测试Second
及其与Second
的互动。这意味着您正在使用Second
的虚拟版本,您可以在调用其方法时随意返回。
First
不知道Third
和Fourth
的存在,所以根本不需要嘲笑它们。