Skip to content

Instantly share code, notes, and snippets.

@cmeeren
Created April 2, 2017 09:12
Show Gist options
  • Save cmeeren/26411dddca4b6ae8cdbe2e0542178ce4 to your computer and use it in GitHub Desktop.
Save cmeeren/26411dddca4b6ae8cdbe2e0542178ce4 to your computer and use it in GitHub Desktop.
Test that shows that all handlers are invoked before unsubscribing
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