我有以下的方法,它負責調用我的服務類,以及將結果到另一個方法來保存他們在我的分貝:任務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);
但是這拋出我的錯誤,而不是它被傳遞到調用方法中的錯誤處理操作。我還計劃將這種方法與其他幾種方法合併,並處理聯合莊園中的錯誤。
編輯:這是我如何訂閱可觀察
Exception error = null;
_sessionManager
.SyncSessions()
.Subscribe(null, e => error = e);
Assert.That(error, Is.Not.Null.After(500));
我傳遞空到第一個參數,因爲我真的不關心,在本次測試的情況下
添加訂閱代碼 – JFoulkes
測試發生錯誤。 GetSessions()調用了response.EnsureSuccessStatusCode();所以它可能會引發錯誤 – JFoulkes