Teste de unidade para um evento usando Extensões Reativas

estou a usarExtensões reativas para .NET (Rx) expor eventos comoIObservable<T>. Quero criar um teste de unidade em que afirmo que um determinado evento foi disparado. Aqui está uma versão simplificada da classe que eu quero testar:

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 minhas aulas reais são mais complexas. Meu objetivo é verificar se a execução de algumas ações com a classe em teste leva a uma sequência de eventos sinalizados noIObservable. Felizmente, as classes que eu quero testar implementamIDisposable e chamandoOnCompleted o assunto quando o objeto é descartado facilita muito o teste.

Aqui está como eu testo:

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

// Act
classUnderTest.DoSomething();

// Assert
Assert.IsTrue(eventFired);

Usar uma variável para determinar se um evento é disparado não é muito ruim, mas em cenários mais complexos, talvez eu queira verificar se uma sequência específica de eventos é disparada. Isso é possível sem simplesmente registrar os eventos nas variáveis e depois fazer afirmações sobre as variáveis? Ser capaz de usar uma sintaxe fluente do tipo LINQ para fazer afirmações em umIObservable espero tornar o teste mais legível.

questionAnswers(3)

yourAnswerToTheQuestion