Этот вид тестирования для наблюдаемых будет неполным.Совсем недавно команда RX опубликовала планировщик тестов и некоторые расширения (которые, кстати, они используют внутри для тестирования библиотеки).Используя их, вы можете не только проверить, произошло ли что-то или нет, но и убедиться, что сроки и порядок верны.В качестве бонуса планировщик тестов позволяет вам запускать тесты в «виртуальном времени», поэтому тесты запускаются мгновенно, независимо от того, какие большие задержки вы используете внутри.
Джеффри ван Гог из команды RX опубликовал статью о том, как проводить такого рода тестирование.
Приведенный выше тест с использованием упомянутого подхода будет выглядеть следующим образом:
[TestMethod]
public void SimpleTest()
{
var sched = new TestScheduler();
var subject = new Subject<Unit>();
var observable = subject.AsObservable();
var o = sched.CreateHotObservable(
OnNext(210, new Unit())
,OnCompleted<Unit>(250)
);
var results = sched.Run(() =>
{
o.Subscribe(subject);
return observable;
});
results.AssertEqual(
OnNext(210, new Unit())
,OnCompleted<Unit>(250)
);
}:
РЕДАКТИРОВАТЬ: Вы также можете позвонить.OnNext (или какой-то другой метод) неявно:
var o = sched.CreateHotObservable(OnNext(210, new Unit()));
var results = sched.Run(() =>
{
o.Subscribe(_ => subject.OnNext(new Unit()));
return observable;
});
results.AssertEqual(OnNext(210, new Unit()));
Моя точка зрения - в простейших ситуациях вам нужно просто убедиться, что событие запущено (например, вы проверяете, где работает правильно).Но тогда, когда вы прогрессируете в сложности, вы начинаете тестирование на время, или завершение, или что-то еще, что требует виртуального планировщика.Но природа теста с использованием виртуального планировщика, в отличие от «обычных» тестов, заключается в тестировании всего наблюдаемого за один раз, а не «атомарных» операций.
Так что, вероятно, вам придется переключиться на виртуальный планировщик где-нибудь в будущем - почему бы не начать с него в начале?
PS Кроме того, вам придется прибегнуть к другой логике длякаждый тестовый случай - например, у вас будет совсем другое наблюдение для проверки того, что что-то не произошло, противоположное тому, что произошло.