@Override
    public Class<T> getInterface() {
        return directory.getInterface();
    }
@Test
    void testGetMenuWithMergerDefault() {

        // setup
        url = url.addParameter(MERGER_KEY, "default");

        given(invocation.getMethodName()).willReturn("getMenu");
        given(invocation.getParameterTypes()).willReturn(new Class<?>[] {});
        given(invocation.getArguments()).willReturn(new Object[] {});
        given(invocation.getObjectAttachments()).willReturn(new HashMap<>());
        given(invocation.getInvoker()).willReturn(firstInvoker);
        // mock ApplicationModel
        given(invocation.getModuleModel()).willReturn(moduleModel);
        given(invocation.getModuleModel().getApplicationModel()).willReturn(ApplicationModel.defaultModel());

        firstInvoker = (Invoker) Proxy.newProxyInstance(
                getClass().getClassLoader(), new Class<?>[] {Invoker.class}, (proxy, method, args) -> {
                    if ("getUrl".equals(method.getName())) {
                        return url.addParameter(GROUP_KEY, "first");
                    }
                    if ("getInterface".equals(method.getName())) {
                        return MenuService.class;
                    }
                    if ("invoke".equals(method.getName())) {
                        return AsyncRpcResult.newDefaultAsyncResult(firstMenu, invocation);
                    }
                    return null;
                });

        secondInvoker = (Invoker) Proxy.newProxyInstance(
                getClass().getClassLoader(), new Class<?>[] {Invoker.class}, (proxy, method, args) -> {
                    if ("getUrl".equals(method.getName())) {
                        return url.addParameter(GROUP_KEY, "second");
                    }
                    if ("getInterface".equals(method.getName())) {
                        return MenuService.class;
                    }
                    if ("invoke".equals(method.getName())) {
                        return AsyncRpcResult.newDefaultAsyncResult(secondMenu, invocation);
                    }
                    return null;
                });

        given(directory.list(invocation)).willReturn(new ArrayList() {

            {
                add(firstInvoker);
                add(secondInvoker);
            }
        });
        given(directory.getUrl()).willReturn(url);
        given(directory.getConsumerUrl()).willReturn(url);
        given(directory.getConsumerUrl()).willReturn(url);
        given(directory.getInterface()).willReturn(MenuService.class);

        mergeableClusterInvoker = new MergeableClusterInvoker<MenuService>(directory);

        // invoke
        try {
            mergeableClusterInvoker.invoke(invocation);
        } catch (RpcException exception) {
            Assertions.assertTrue(exception.getMessage().contains("There is no merger to merge result."));
        }
    }