diff --git a/src/NSubstitute/Routing/Handlers/RaiseEventHandler.cs b/src/NSubstitute/Routing/Handlers/RaiseEventHandler.cs index c5796c2b4..e98b92334 100644 --- a/src/NSubstitute/Routing/Handlers/RaiseEventHandler.cs +++ b/src/NSubstitute/Routing/Handlers/RaiseEventHandler.cs @@ -30,6 +30,11 @@ public RouteAction Handle(ICall call) var handlers = _eventHandlerRegistry.GetHandlers(eventInfo.Name); foreach (Delegate handler in handlers) { + if (handler == null) + { + continue; + } + try { handler.DynamicInvoke(eventArguments); diff --git a/tests/NSubstitute.Acceptance.Specs/EventChecking.cs b/tests/NSubstitute.Acceptance.Specs/EventChecking.cs index 4b2cd2ba8..11ca977e3 100644 --- a/tests/NSubstitute.Acceptance.Specs/EventChecking.cs +++ b/tests/NSubstitute.Acceptance.Specs/EventChecking.cs @@ -17,6 +17,35 @@ public void Check_if_event_was_subscribed_to() Assert.Throws(() => engine.Received().Started += someOtherHandler); } + [Test] + public void Check_if_nullHandlers_are_ignored() + { + var raised = false; + var source = Substitute.For(); + source.Started += null; + source.Started += () => raised = true; + source.Started += Raise.Event(); + + Assert.IsTrue(raised); + } + + [Test] + public void Check_if_multiple_handlers_get_called() + { + var raised1 = false; + var raised2 = false; + var raised3 = false; + var source = Substitute.For(); + source.Started += () => raised1 = true; + source.Started += () => raised2 = true; + source.Started += () => raised3 = true; + source.Started += Raise.Event(); + + Assert.IsTrue(raised1, "The first handler was not called"); + Assert.IsTrue(raised2, "The second handler was not called"); + Assert.IsTrue(raised3, "The third handler was not called"); + } + public interface IEngine { event Action Started;