Pruebas unitarias para un evento usando extensiones reactivas

Estoy usandoExtensiones reactivas para .NET (Rx) para exponer eventos comoIObservable<T>. Quiero crear una prueba de unidad donde afirmo que se dispara un evento en particular. Aquí hay una versión simplificada de la clase que quiero probar:

public sealed class ClassUnderTest : IDisposable {

  Subject<Unit> subject = new Subject<Unit>();

  public IObservable<Unit> SomethingHappened {
    get { return this.subject.AsObservable(); }
  }

  public void DoSomething() {
    this.subject.OnNext(new Unit());
  }

  public void Dispose() {
    this.subject.OnCompleted();
  }

}

Obviamente mis clases reales son más complejas. Mi objetivo es verificar que realizar algunas acciones con la clase bajo prueba conduzca a una secuencia de eventos señalados en elIObservable. Afortunadamente, las clases que quiero probar implementanIDisposable y llamandoOnCompleted sobre el tema cuando el objeto está dispuesto hace que sea mucho más fácil de probar.

Así es como lo pruebo:

// Arrange
var classUnderTest = new ClassUnderTest();
var eventFired = false;
classUnderTest.SomethingHappened.Subscribe(_ => eventFired = true);

// Act
classUnderTest.DoSomething();

// Assert
Assert.IsTrue(eventFired);

Usar una variable para determinar si se dispara un evento no es tan malo, pero en escenarios más complejos, es posible que desee verificar que se dispare una secuencia particular de eventos. ¿Es posible sin simplemente registrar los eventos en variables y luego hacer afirmaciones sobre las variables? Ser capaz de usar una sintaxis fluida similar a LINQ para hacer afirmaciones en unIObservable con suerte haría la prueba más legible.

Respuestas a la pregunta(3)

Su respuesta a la pregunta