如何在Java中的另一个模拟对象的模拟中注入模拟对象?
我有以下课程。DataServices对象在ProductImpl和Mapper中都使用。但是它的mock在ProductImpl中可用,但在Mapper类中不可用。我不知道需要做什么,以便在Mapper类中也可以使用模拟的数据服务如何在Java中的另一个模拟对象的模拟中注入模拟对象?,java,mockito,Java,Mockito,我有以下课程。DataServices对象在ProductImpl和Mapper中都使用。但是它的mock在ProductImpl中可用,但在Mapper类中不可用。我不知道需要做什么,以便在Mapper类中也可以使用模拟的数据服务 class ProductImpl{ @Inject private DataServices ds; @Inject private Mapper mapper; public void call(){ ds.get(); /
class ProductImpl{
@Inject private DataServices ds;
@Inject private Mapper mapper;
public void call(){
ds.get(); //ds is not null here
mapper.map();
// some code
}
}
abstact class Mapper{
@Inject private DataServices ds;
public void map(){
ds.get()// ds is null here
//some code
}
}
我有下面的考试课
class Test{
@Mock private DataServices ds;
@Mock private Mapper mapper;
@InjectMocks private ProductImpl impl;
@Before
public void setUp(){
MockitoAnnotations.initMocks(this)
}
@Test
public void test(){
impl.call();
}
}
如果我理解正确,您不需要在Mapper中进行另一次模拟,因为您已经模拟了Mapper类,而且map方法是无效的,尽管如果某个方法返回了一些东西,您可以在时轻松地使用它来提供您在测试中需要的行为 模拟对象不需要任何传统依赖项。具有名为will do nothing.ds get()的void方法的模拟对象将从显示的代码中返回一个object,但看起来并非如此。您的映射程序已模拟。不管它的方法有什么实际的实现和依赖性都无关紧要。一个mock会做你让它做的事情。如果你能分享一个mock,那就太棒了,这样我们就可以更清楚地了解当前的问题以及你到底想做什么