@Override
    public void notify(BitList<Invoker<T>> invokers) {
        cacheMockedInvokers(invokers);
        cacheNormalInvokers(invokers);
    }
@Test
    void test() {

        MockInvokersSelector selector = new MockInvokersSelector(URL.valueOf(""));

        // Data preparation
        Invoker<DemoService> invoker1 = Mockito.mock(Invoker.class);
        Invoker<DemoService> invoker2 = Mockito.mock(Invoker.class);
        Invoker<DemoService> invoker3 = Mockito.mock(Invoker.class);
        Mockito.when(invoker1.getUrl()).thenReturn(URL.valueOf("mock://127.0.0.1/test"));
        Mockito.when(invoker2.getUrl()).thenReturn(URL.valueOf("mock://127.0.0.1/test"));
        Mockito.when(invoker3.getUrl()).thenReturn(URL.valueOf("dubbo://127.0.0.1/test"));
        BitList<Invoker<DemoService>> providers = new BitList<>(Arrays.asList(invoker1, invoker2, invoker3));

        RpcInvocation rpcInvocation = Mockito.mock(RpcInvocation.class);

        URL consumerURL = URL.valueOf("test://127.0.0.1");

        selector.notify(providers);
        // rpcInvocation does not have an attached "invocation.need.mock" parameter, so normal invokers will be filtered
        // out
        List<Invoker<DemoService>> invokers =
                selector.route(providers.clone(), consumerURL, rpcInvocation, false, new Holder<>());
        Assertions.assertEquals(invokers.size(), 1);
        Assertions.assertTrue(invokers.contains(invoker3));

        // rpcInvocation have an attached "invocation.need.mock" parameter, so it will filter out the invoker whose
        // protocol is mock
        Mockito.when(rpcInvocation.getObjectAttachmentWithoutConvert(INVOCATION_NEED_MOCK))
                .thenReturn("true");
        invokers = selector.route(providers.clone(), consumerURL, rpcInvocation, false, new Holder<>());
        Assertions.assertEquals(invokers.size(), 2);
        Assertions.assertTrue(invokers.contains(invoker1));
        Assertions.assertTrue(invokers.contains(invoker2));
    }