я следующий метод, который отвечает за вызов моего класса обслуживания и передачи результатов к другому способу их сохранения в моей БД:Задача ToObservable Обработка ошибок
public IObservable<bool> SyncSessions()
{
var subject = new ReplaySubject<bool>();
try
{
var query = new ByFilterQuery { SearchPeriodStartTime = DateTime.Now };
var sessions = _sessionService.GetSessions(query).Result;
var saved = SaveSessions(sessions);
subject.OnNext(saved);
subject.OnCompleted();
}
catch (Exception ex)
{
subject.OnError(ex);
}
return subject;
}
_sessionService.GetSessions будет бросать HttpRequestException если сервер возвращает 500 или что-то подобное. У меня есть единичный тест, который издевается над этим поведением и хочет протестировать мой метод, который обрабатывает ошибку изящно.
Есть ли лучшие способы распространения ошибки в режиме Rx? Я пробовал делать:
_sessionService.GetSessions(query).ToObservable().Select(SaveSessions);
Но это моя ошибка кинул вместо него передается на обработку ошибок действий в вызывающем методе. Я также планирую объединить этот метод с несколькими другими и обработать ошибки в объединенной усадьбе.
EDIT: Вот как я подписавшись на наблюдаемом
Exception error = null;
_sessionManager
.SyncSessions()
.Subscribe(null, e => error = e);
Assert.That(error, Is.Not.Null.After(500));
Я передаю нуль в качестве первого параметра, как я на самом деле не волнует, что в контексте этого теста
Добавлено подписавшись кодом – JFoulkes
Test бросает ошибку. GetSessions() имеет вызов response.EnsureSuccessStatusCode(); поэтому может возникнуть ошибка – JFoulkes