mockito 如何测试类的@ConfigProperty变量

y0u0uwnf  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(306)

请让我知道我们如何在junit中测试下面的代码。ConfigProperty正在从www.example.com文件中读取值application.property。现在我必须写一个单元测试用例,我可以写请帮助我。

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonTypeName("ProcessMessageDedup")
public class ProcessMessageDedup extends ProcessMessage {
    @ConfigProperty(name = "dedupAppName", defaultValue = "dedup")
    public String appName;
    @ConfigProperty(name = "dedupProcessURL")
    public String processURL;
    @ConfigProperty(name = "callbackURL")
    public String callbackURL;
    @ConfigProperty(name = "dedupCallbackEndpoint")
    public String callbackEndpoint;
    @ConfigProperty(name = "callbackUser")
    public String callbackUser;
    @ConfigProperty(name = "callbackPass")
    public String callbackPass;

    public ProcessMessageDedup() {
        setProperties();
    }

    private void setProperties() {
        appName = ConfigProvider.getConfig().getValue("dedupAppName", String.class);
        processURL = ConfigProvider.getConfig().getValue("dedupProcessURL", String.class);
        callbackURL = ConfigProvider.getConfig().getValue("callbackURL", String.class);
        callbackEndpoint = ConfigProvider.getConfig().getValue("dedupCallbackEndpoint", String.class);
        callbackUser = ConfigProvider.getConfig().getValue("callbackUser", String.class);
        callbackPass = ConfigProvider.getConfig().getValue("callbackPass", String.class);
    }

    public void process() throws Exception {
        try {
            logger.info("Processing " + appName + " tid: " + tid);
            logger.info("Processing " + appName + " queryparams: " + queryParams.toString());
            setProperties();
            new CallbackUtils().callProcess(this.getData(), this.processURL, tid, fileId, "", queryParams, appName,
                    callbackURL, callbackEndpoint, callbackUser, callbackPass);
        } catch (Exception e) {
            logger.error(e.getMessage());
            throw e;
        } finally {
            this.deleteFile();
        }
    }

    @Override
    public void callback() {
        // TODO Auto-generated method stub

    }
}

请让我知道我们如何编写这个类的单元测试。

uujelgoq

uujelgoq1#

首先,您使用的是什么框架,Spring,......?如果是Spring,您需要查看@ConfigurationProperties@Value
要在Spring中测试配置参数,您应该使用ReflectionTestUtils,请参阅此答案以了解更多信息:https://stackoverflow.com/a/17355595/3845362
第二,从你的问题中还不清楚你到底想测试什么。

  • 是否要测试application.properties中正确值的框架加载?
  • 是否要测试ProcessMessageDedup类内部的逻辑?

顺便说一句,你的字段是公共的,所以即使在你初始化你的类之后,你也可以修改如下:

ProcessMessageDedup p = new ProcessMessageDedup (); // calls setProperties()
p.appName = "Foo";
p.processURL = "Bar";
...
klr1opcd

klr1opcd2#

@ConfigProperty旨在由CDI容器用于注入配置值。简单的JUnit测试不足以注入这样的值。您需要一个处理注入部分的CDI容器。
您可以使用Weld-JUnit 5:https://github.com/weld/weld-testing/tree/master/junit5
或者在本例中,由于您使用的是Quarkus,因此您使用@QuarkusTest注解测试类,Quarkus将在测试类中为您处理注入部分:https://quarkus.io/guides/getting-started-testing

相关问题