Created
April 2, 2017 09:12
-
-
Save cmeeren/26411dddca4b6ae8cdbe2e0542178ce4 to your computer and use it in GitHub Desktop.
Test that shows that all handlers are invoked before unsubscribing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace EventUnsubscriptionTest | |
{ | |
using System; | |
using NUnit.Framework; | |
public class EventSource | |
{ | |
public event Action Event; | |
public void TriggerEvent() | |
{ | |
this.Event?.Invoke(); | |
} | |
} | |
public class EventSourceTests | |
{ | |
[Test] | |
public void When_Unsubscribing_Should_InvokeAllBeforeUnsubscribing() | |
{ | |
// Arrange | |
var invokeCounter = 0; | |
var listener1InvokedOrder = 0; | |
var listener2InvokedOrder = 0; | |
var listener3InvokedOrder = 0; | |
var sut = new EventSource(); | |
Action listener1 = null; | |
Action listener2 = null; | |
Action listener3 = null; | |
listener1 = () => listener1InvokedOrder = ++invokeCounter; | |
listener2 = () => | |
{ | |
listener2InvokedOrder = ++invokeCounter; | |
sut.Event -= listener1; | |
sut.Event -= listener2; | |
sut.Event -= listener3; | |
}; | |
listener3 = () => listener3InvokedOrder = ++invokeCounter; | |
sut.Event += listener1; | |
sut.Event += listener2; | |
sut.Event += listener3; | |
// Act | |
sut.TriggerEvent(); | |
// Assert | |
Assert.That(listener1InvokedOrder, Is.EqualTo(1)); | |
Assert.That(listener2InvokedOrder, Is.EqualTo(2)); | |
Assert.That(listener3InvokedOrder, Is.EqualTo(3)); | |
// Ensure that we actually unsubscribed | |
sut.TriggerEvent(); | |
Assert.That(invokeCounter, Is.EqualTo(3)); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment