私はプロジェクトでRx、より具体的にはReactiveUIをしばらく使用していましたが、何かアドバイスが必要な状況に陥っています。ReactiveUI MessageBusとMessageBoxの結果が
問題は、コマンドが実行されたとき(ボタンがクリックされたとき)、ユーザーが「はい」または「いいえ」と答えるメッセージボックスを表示することです。答えに応じて、もの。ユニットテストでMVVMを使用しているので、私はMessageBoxをテスト可能にしたいと思います。すなわち、他のコードに置き換えられる。これは基本的に私が持っているものです。私の見解モデルで
:
this.ExternalObservable = this.SomeOperationCommand
.SelectMany(_ => this.UserWantsToContinueWithOperation())
.Where(x => x)
.Select(_ => this.SomeData)
.Where(x => x != null);
private IObservable<bool> UserWantsToContinueWithOperation() {
var subject = new Subject<bool>();
var box = new GuiMsgBox("Continue?",
result => {
subject.OnNext(result == System.Windows.MessageBoxResult.Yes);
});
MessageBus.Current.SendMessage(box);
return subject;
}
そしてGuiMsgBox
は、基本的に私はUIで、私のテストでMessageBus
を使用して耳を傾けるSystem.Windows.MessageBox
クラスのラッパーです。
アプリケーションを実行しているときに、このすべてが正常に動作しますが、ユニットテストでは、バスがイミディエイトスケジューラを使用しているため、明らかに同じ方法では動作しません。
私はここにいくつかのデザイングリッジがあると感じています。したがって、実際の問題の入力はありません。テストすることができる結果を返すメッセージボックスを表示するには、非常に感謝します!
良いアイデアは、私はこの特定の問題の 'TestScheduler'を試してみます。ダイアログボックスから結果を取得する方法について、他に何をお考えですか? ReactiveUIを使用しているときはどうしますか?私は、即時の代わりに延期されている 'MessageBus'まで沸騰していると思います。 MVVMLight、そうじゃない? – lbergnehr