在测试环境中使用全局变量。

问题描述 投票:0回答:1

我想知道在这种特殊情况下,我是否可以在API上使用全局变量。

我在一个lib里有一个类(我没有权限),它可以读取一个消息队列(像kafka或rabbit)并在弹性搜索中发布。

比如说,我需要扩展这个类来增加功能。

public Class MessageQueue(message) {
    if (isValid(c)) {
        // post in kibana
        onDelivered(message)
    }
}

我需要扩展这个类来增加功能

public Class MessageQueueService extends MessageQueue {

    UserRestService userRestService;

    User user;

    @Inject
    public void MessageQueueService(UserRestService userRestService) {
        this.userRestService = userRestService;
    }

    public boolean isValid(message) {
        // first a made if's to discard the message with the message info, to avoid the API call

        //if the message is Valid here
        user = userRestService.get(message.getId);

        //more validation
    }

    public void onDelivered(message) {

        // bunch of code with the user info like: 
        doStaff(user);

        return;
    }
}

我的问题是,正确使用全局变量的方法是什么?用户因为我不能在构造函数中初始化,因为我可能最终不会使用这个请求。而且我认为使用单胎是违反规则的。

当我试图对de onDelivered方法进行单元测试时,我失败了,因为我不能模拟User全局变量,我有点迷茫。

我使用Java与Guice和JUnit以及Mockito来进行测试!请问你是怎么做到的?谢谢你的帮助。

java junit mockito guice
1个回答
0
投票

你可以使用java反射来做这样的事情

@Test
    public void shouldDoSomething() throws Exception {
        Field field = targetTestObject.getClass().getDeclaredField("shipment");
        field.setAccessible(true);
        field.set(targetTestObject, user);
    }
© www.soinside.com 2019 - 2024. All rights reserved.