开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
CWIKIUS.CN
一个有独立思考和温度的清新站
  1. Home
  2. Computer Science
  3. This article

Junit 5 如何使用 Guice DI

2023年04月24日 673Browse 0Like 0Comments

Guice 是一个依赖注入的小清新工具。

相比 Spring 的依赖管理来说,这个工具更加小巧,我们可以在测试中直接使用。

Junit 5

在 Junit 中使用就没有那么方便了,因为 Junit 没有 Guice 的注解。

你需要手动写一个类,在这个类中,对 Injector 的模块进行配置。

例如我们下面的代码:

package com.ossez.wechat.oa.api.test;

import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.ossez.wechat.common.exception.WxRuntimeException;
import com.ossez.wechat.oa.api.WeChatOfficialAccountService;
import com.ossez.wechat.oa.api.impl.okhttp.WeChatMsgService;
import com.ossez.wechat.oa.api.impl.okhttp.WeChatOfficialAccountServiceOkHttp;
import org.apache.commons.lang3.ObjectUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.junit.jupiter.api.BeforeAll;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.locks.ReentrantLock;

/**
 * Init Guice DI
 *
 * @author YuCheng
 */
public class TestBase {
    private static final Logger log = LoggerFactory.getLogger(TestBase.class);
    private static final String TEST_CONFIG_XML = "test-config.xml";

    private static final Injector injector = Guice.createInjector(new AbstractModule() {
        @Override
        public void configure() {
            try (InputStream inputStream = ClassLoader.getSystemResourceAsStream(TEST_CONFIG_XML)) {

                if (ObjectUtils.isEmpty(inputStream)) {
                    throw new WxRuntimeException("测试配置文件【" + TEST_CONFIG_XML + "】未找到,请参照test-config-sample.xml文件生成");
                }


                // Init WeChat config for testing
                Document document = new SAXReader().read(inputStream);
                TestConfigStorage config = new TestConfigStorage();
                config.setAppId(document.getRootElement().element("appId").getText());
                config.setSecret(document.getRootElement().element("secret").getText());
                config.setToken(document.getRootElement().element("token").getText());
                config.setOpenid(document.getRootElement().element("openid").getText());
                config.setAccessTokenLock(new ReentrantLock());

                // Init WeChat Service
                WeChatOfficialAccountService weChatOfficialAccountService = new WeChatOfficialAccountServiceOkHttp();
                weChatOfficialAccountService.setWxMpConfigStorage(config);
                weChatOfficialAccountService.addConfigStorage("another", config);

                // Init WeChatMsgService
                WeChatMsgService weChatMsgService = new WeChatMsgService(weChatOfficialAccountService);

                bind(TestConfigStorage.class).toInstance(config);
                bind(WeChatOfficialAccountService.class).toInstance(weChatOfficialAccountService);
                bind(WeChatMsgService.class).toInstance(weChatMsgService);
            } catch (IOException e) {
                log.error(e.getMessage(), e);
            } catch (DocumentException e) {
                throw new RuntimeException(e);
            }
        }

    });


    @BeforeAll
    public void setup() {
        injector.injectMembers(this);
    }
}

在这个代码中,我们定义了一个 TestBase 的类,然后在测试启动的时候对齐进行了初始化和配置。

最主要的就是这个方法:`private static final Injector injector = Guice.createInjector(new AbstractModule() {}

 

2023-04-23_15-27-00

 

在测试中使用

在测试中使用就比较简单了。

首先需要继承这个 TestBase,然后对需要的类进行注入后就可以直接使用了。

 

2023-04-23_15-28-06

 

如上图,注入后直接使用。

 

https://www.ossez.com/t/junit-5-guice-di/14395

Tags: None
Last updated:2023年04月24日

HoneyMoose

有温度的人文和独立的思考

Like
< Previous
Next >

Comments

Cancel reply

Archives
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,320)
    • Confluence (663)
    • Gradle (12)
  • U.S. (433)
  • 文化旅游 (142)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1