Mockito:将真实对象注入私有的@Autowired字段

 乃_黄包11_753 发布于 2023-02-14 02:57

我正在使用Mockito @Mock@InjectMocks注释将依赖项注入到使用Spring注释的私有字段中@Autowired:

@RunWith(MockitoJUnitRunner.class)
public class DemoTest {
    @Mock
    private SomeService service;

    @InjectMocks
    private Demo demo;

    /* ... */
}

public class Demo {

    @Autowired
    private SomeService service;

    /* ... */
}

现在我想将真实对象注入私有@Autowired字段(没有setter).这是可能的还是机制仅限于注射Mocks?

2 个回答
  • 使用@Spy注释

    @RunWith(MockitoJUnitRunner.class)
    public class DemoTest {
        @Spy
        private SomeService service = new RealServiceImpl();
    
        @InjectMocks
        private Demo demo;
    
        /* ... */
    }
    

    Mockito会将所有具有@Mock@Spy注释的字段视为注入注释的实例中的潜在候选项@InjectMocks.在上面的例子中,'RealServiceImpl'实例将被注入'demo'

    有关详细信息,请参阅

    的Mockito回家

    @间谍

    @嘲笑

    2023-02-14 03:32 回答
  • 除了@Dev Blanked的答案,如果你想使用Spring创建的现有bean,代码可以修改为:

    @RunWith(MockitoJUnitRunner.class)
    public class DemoTest {
    
        @Inject
        private ApplicationContext ctx;
    
        @Spy
        private SomeService service;
    
        @InjectMocks
        private Demo demo;
    
        @Before
        public void setUp(){
            service = ctx.getBean(SomeService.class);
        }
    
        /* ... */
    }
    

    这样您就不需要更改代码(添加另一个构造函数)来使测试工作.

    2023-02-14 03:42 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有