4

サービスクラスを呼び出し、結果を別のメソッドに渡してデータベースに保存する次のメソッドがあります。

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 を渡します

4

1 に答える 1