私はプロジェクトで Rx 、より具体的には ReactiveUI をしばらく使用しており、アドバイスが必要だと思う状況に陥っています。
問題は、コマンドが実行された (ボタンがクリックされた) ときに、ユーザーが「はい」または「いいえ」と答えるメッセージ ボックスを表示したいということです。単体テストで 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 とテストでSystem.Windows.MessageBox
使用してリッスンします。MessageBus
これは、アプリケーションの実行時にはすべて正常に機能しますが、単体テストでは、バスがイミディエイト スケジューラを使用しているため、明らかに同じようには機能しません。
ここには設計上の問題があると思うので、実際の問題についての意見をお寄せください。テスト可能な結果を返すメッセージ ボックスを表示するには、非常にありがたいです!