サービスクラスを呼び出し、結果を別のメソッドに渡してデータベースに保存する次のメソッドがあります。
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;
}
サーバーが 500 などを返した場合、_sessionService.GetSessions は HttpRequestException をスローします。この動作をモックする単体テストがあり、メソッドがエラーを適切に処理することをテストしたいと考えています。
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));
このテストのコンテキストではあまり気にしないので、最初のパラメーターに null を渡します