首页 > 解决方案 > 如何为使用泛型的拦截器编写测试类

问题描述

尝试为以下也使用泛型的拦截器类编写 Juint 测试用例时,我遇到了一个问题。有关如何使用 Junit 和 Mockito 处理此问题的任何线索。

import io.grpc.Attributes;
import io.grpc.Context;
import io.grpc.Contexts;
import io.grpc.Metadata;
import io.grpc.ServerCall;
import io.grpc.ServerCall.Listener;
import io.grpc.ServerCallHandler;
import io.grpc.ServerInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.lognet.springboot.grpc.GRpcGlobalInterceptor;
import org.springframework.beans.factory.annotation.Autowired;

@GRpcGlobalInterceptor
@Slf4j
public class CommonInterceptor implements ServerInterceptor {

    @Autowired
    private GrpcRequestMetadataUtil requestMetadataUtil;
    public static final Context.Key<Object> USER_IDENTITY = Context.key("identity");

    public <ReqT, RespT> Listener<ReqT> interceptCall(final ServerCall<ReqT, RespT> serverCall, final Metadata metadata,
                                                      final ServerCallHandler<ReqT, RespT> serverCallHandler) {

        log.info("Enters on method interceptCall in CommonInterceptor: ");
        Context context = Context.current().withValue(USER_IDENTITY,
                metadata.get(Metadata.Key.of("authorization", Metadata.ASCII_STRING_MARSHALLER)));
        logRequestMetadata(serverCall.getAttributes(), metadata);
        return Contexts.interceptCall(context, serverCall, metadata, serverCallHandler);

    }

    private void logRequestMetadata(final Attributes attribute, final Metadata metadata) {
        try {
            log.info("Request Meta Properties [" + requestMetadataUtil.getRequestMetadataLog(attribute, metadata) + "]");
        } catch (Exception exception) {
            log.error("Error in CommonInterceptor@logRequestMetadata", exception);
        }
    }

}

标签: spring-bootjunitmockitogrpc

解决方案


推荐阅读