  @Test
  @DisplayName("invokeBidirectional should return error response when service throws exception")
  void testInvokeBidirectionalWhenThrowException() throws Exception {

    final String methodName = "throwException3";
    final Class<? extends StubService> serviceClass = stubService.getClass();
    final Method method = serviceClass.getMethod(methodName, Flux.class);

    final MethodInfo methodInfo =
        new MethodInfo(
            serviceClass.getName(),
            methodName,
            method.getReturnType(),
            IS_RETURN_TYPE_SERVICE_MESSAGE,
            CommunicationMode.REQUEST_CHANNEL,
            method.getParameterCount(),
            Void.TYPE,
            IS_REQUEST_TYPE_SERVICE_MESSAGE,
            AUTH);

    serviceMethodInvoker =
        new ServiceMethodInvoker(
            method,
            stubService,
            methodInfo,
            DefaultErrorMapper.INSTANCE,
            dataDecoder,
            nullAuthenticator,
            nullPrincipalMapper);

    ServiceMessage message =
        ServiceMessage.builder().qualifier(qualifierPrefix + methodName).build();

    // invokeOne
    final Flux<ServiceMessage> invokeOne =
        Flux.deferWithContext(
                context -> serviceMethodInvoker.invokeBidirectional(Flux.just(message)))
            .subscriberContext(context -> context.put(AUTH_CONTEXT_KEY, AUTH_DATA));

    StepVerifier.create(invokeOne)
        .assertNext(serviceMessage -> Assertions.assertTrue(serviceMessage.isError()))
        .verifyComplete();
  }