@Override
    public void removeSubscriber(Subscriber subscriber) {
        removeSubscriber(subscriber, subscriber.subscribeType());
    }
@Test
    void testRemoveSubscriber() {
        traceEventPublisher.addSubscriber(subscriber, TraceTestEvent.TraceTestEvent1.class);
        traceEventPublisher.addSubscriber(smartSubscriber, TraceTestEvent.TraceTestEvent1.class);
        TraceTestEvent.TraceTestEvent1 traceTestEvent1 = new TraceTestEvent.TraceTestEvent1();
        traceEventPublisher.publish(traceTestEvent1);
        ThreadUtils.sleep(2000L);
        verify(subscriber).onEvent(traceTestEvent1);
        verify(smartSubscriber).onEvent(traceTestEvent1);
        traceEventPublisher.removeSubscriber(smartSubscriber, TraceTestEvent.TraceTestEvent1.class);
        traceTestEvent1 = new TraceTestEvent.TraceTestEvent1();
        traceEventPublisher.publish(traceTestEvent1);
        ThreadUtils.sleep(500L);
        verify(subscriber).onEvent(traceTestEvent1);
        verify(smartSubscriber, never()).onEvent(traceTestEvent1);
        reset(subscriber);
        when(subscriber.subscribeType()).thenReturn(TraceTestEvent.TraceTestEvent1.class);
        traceEventPublisher.removeSubscriber(subscriber);
        traceEventPublisher.publish(traceTestEvent1);
        ThreadUtils.sleep(500L);
        verify(subscriber, never()).onEvent(traceTestEvent1);
        verify(smartSubscriber, never()).onEvent(traceTestEvent1);
    }