我正在尝试为身份验证服务器拦截器编写单元测试。拦截器从附加的元数据标头中提取用户ID信息,并将其存储为ContextKey,以后将在服务调用中使用它。我是根据this线程中的指令完成此操作的。
基于HeaderServerInterceptorTest示例,我建立了自己的测试,该测试的确调用了拦截器。但是,当尝试声明用户ID值时,该值始终为null。
我的拦截器类是:
@Override
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(ServerCall<ReqT, RespT> call, Metadata headers,
ServerCallHandler<ReqT, RespT> next) {
// authentication and extracting user ID info
Context context = Context.current();
return Contexts.interceptCall(context.withValue(USER_ID, id), call, headers, next);
}
由于USER_ID值为空,所以插入总是失败。
assertEquals("john_doe_ID", MyServerInterceptor.getUserID());
我猜我在测试中缺少Context的其他一些配置,但是找不到类似的东西...