internal void EventDispatching(
            Type eventType,
            string[] expectedInvocations,
            MessageDispatcher dispatcher,
            Messenger m,
            Messenger sub,
            List <string> invocations
            )
        {
            GIVEN["a Messenger with some registrations a subordinate Messenger"] = () => {
                invocations = new List <string>();
                dispatcher  = new MessageDispatcher(m = new Messenger());
                m.Apply <DerivedEvent>(e => invocations.Add("ROOT-DE"));
                m.Register(sub = new Messenger());
                m.Apply <BaseEvent>(e => invocations.Add("ROOT-BE"));
                sub.Apply <DerivedEvent>(e => invocations.Add("SUB-DE"));
                sub.Apply <TestEvent>(e => invocations.Add("SUB-TE"));
            };

            WHEN["applying the event"] = () => m.ApplyChange((IEvent)Activator.CreateInstance(eventType));
            THEN["the expected handlers are invoked"] = () => invocations.Should().BeEquivalentTo(expectedInvocations);

            WHEN["a subordinate Messenger applies the event"] = () => {
                invocations.Clear();
                sub.ApplyChange((IEvent)Activator.CreateInstance(eventType));
            };
            THEN["the same handlers are invoked"] = () => invocations.Should().BeEquivalentTo(expectedInvocations);
        }