Модульное тестирование события с использованием Reactive Extensions ⇐ C#

Место общения программистов C#
Anonymous
Модульное тестирование события с использованием Reactive Extensions

Сообщение Anonymous »

Я использую реактивные расширения для .NET (Rx) для предоставления событий как IObservable. Я хочу создать модульный тест, в котором я утверждаю, что запускается определенное событие. Вот упрощенная версия класса, который я хочу протестировать:

Код: Выделить всё

public sealed class ClassUnderTest : IDisposable {

Subject subject = new Subject();

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

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

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

}
Очевидно, что мои настоящие классы более сложны. Моя цель — убедиться, что выполнение некоторых действий с тестируемым классом приводит к последовательности событий, сигнализируемых IObservable. К счастью, классы, которые я хочу протестировать, реализуют IDisposable, а вызов OnCompleted для объекта при удалении объекта значительно упрощает тестирование.

Вот как я тестирую:

Код: Выделить всё

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

// Act
classUnderTest.DoSomething();

// Assert
Assert.IsTrue(eventFired);
Использовать переменную для определения того, было ли запущено событие, не так уж и плохо, но в более сложных сценариях мне может потребоваться проверить, запускается ли определенная последовательность событий. Возможно ли это без простой записи событий в переменных и последующего выполнения утверждений по этим переменным? Мы надеемся, что возможность использовать свободный синтаксис, подобный LINQ, для создания утверждений в IObservable сделает тест более читабельным.

Подробнее здесь: https://stackoverflow.com/questions/391 ... extensions

Вернуться в «C#»