如何在Java中的另一个模拟对象的模拟中注入模拟对象?

如何在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(); /

我有以下课程。DataServices对象在ProductImpl和Mapper中都使用。但是它的mock在ProductImpl中可用,但在Mapper类中不可用。我不知道需要做什么,以便在Mapper类中也可以使用模拟的数据服务

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,那就太棒了,这样我们就可以更清楚地了解当前的问题以及你到底想做什么