首页 > 解决方案 > 如何在 Spring 集成测试中模拟注入服务的方法

问题描述

我有以下服务类,我想测试

@Service
public class MasterService {

    @Inject
    private ServiceOne serviceOne;

    @Autowired
    private ServiceTwo serviceTwo;

    @Inject
    private ServiceThree serviceThree;

    @VisibleForTesting
    void execute() {
        if (serviceThree.isFlag()) {
           ....
        }
    }

我正在测试execute()方法。我想模拟serviceThree.isFlag()返回true。以下是我的测试。

    public class MasterServiceIT{

        @Inject
        private MasterService masterService;

        @Inject
        private ServiceThree serviceThree;

        @Test
        public void testMasterService() {
            when(serviceThree.isFlag()).thenReturn(true); <---- this never works 
            masterService.execute();
        }
    }

但是,它永远不会检索到 true。有什么意见吗?我想使用@InjectMocks然后我可以只注入我嘲笑的这个服务吗?或者如果我正在使用,我需要模拟每个服务@InjectMocks

标签: springmockito

解决方案


您确定需要模拟集成测试吗?好吧,有时我们需要模拟一些服务,这些服务引用了一些外部服务,如 SharePoint 等。好吧,如果你需要模拟,那么在这种情况下,你需要在 spring 上下文中模拟 spring 服务 bean。你可以通过@MockBean


推荐阅读