在这种特殊情况下,我需要知道是否可以在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;
}
}
我的问题是,使用全局变量 user 的正确方法是什么,因为由于无法结束不使用此请求,我无法在构造函数中进行初始化。而且使用单例违反我认为的规则。
当我尝试对de onDelivered方法进行单元测试时失败,因为我无法模拟User全局变量,而我有点迷失了。
我正在将Java与Guice和JUnit和Mockito一起进行测试!谢谢你的帮助。
答案 0 :(得分:0)
您可以使用Java反射来做到这一点
@Test
public void shouldDoSomething() throws Exception {
Field field = targetTestObject.getClass().getDeclaredField("shipment");
field.setAccessible(true);
field.set(targetTestObject, user);
}