我想知道在这种特殊情况下,我是否可以在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反射来做这样的事情
@Test
public void shouldDoSomething() throws Exception {
Field field = targetTestObject.getClass().getDeclaredField("shipment");
field.setAccessible(true);
field.set(targetTestObject, user);
}