나는 프로젝트에서 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