public void Ok2CmdTest()
        {
            //[メッセージボックス表示対応3]=======================================================================
            // 普通のMessageBoxのラッパーメソッドを利用する。
            // メッセージ処理をインターフェース化することで、本番時はインターフェース実装クラス処理を、単体テスト時にはmock実装処理を、行うことができる。
            // * 本ViewModelコンストラクタの引数にメッセージサービスインターフェース実装を渡すようにし、内部でそれを利用する。
            // テストメソッド側で、本ViewModelインスタンス生成時にメッセージサービスインターフェース実装を渡す時には、
            // 自動テストがメッセージボックス表示処理で止まらないために、メッセージサービスインターフェース実装をMOQライブラリを利用して実装する。
            //====================================================================================================
            //[メッセージボックス表示対応3A]----------------------------------------------------------------------
            // メッセージサービスインターフェースのMockインスタンスで実装をしていなければ、
            // メッセージサービスインターフェースメソッドのコードがスルーされるので、テストが止まることはない。
            // 但し、メッセージメソッド自体の結果をテストできない。
            //----------------------------------------------------------------------------------------------------
            //var dialogSvcMoq = new Mock<IDialogService>();
            //var messageSvcMoq = new Mock<IMessageService>();
            //var vm = new ViewUsrCtrlAViewModel(dialogSvcMoq.Object, messageSvcMoq.Object);
            //vm.Ok2Cmd.Execute();

            //[メッセージボックス表示対応3B]----------------------------------------------------------------------
            // メッセージサービスインターフェースのMockインスタンスで実装をすれば、
            // メッセージメソッド自体の結果もテストでき、テストが止まることもない。
            //----------------------------------------------------------------------------------------------------
            var dialogSvcMoq  = new Mock <IDialogService>();
            var messageSvcMoq = new Mock <IMessageService>();

            messageSvcMoq.Setup(x => x.ShowQuestionDialog(It.IsAny <string>()))
            .Callback <string>((messageBoxText) =>
            {
                Debug.WriteLine(messageBoxText);
                Assert.AreEqual("Saveしますか?", messageBoxText);
            })
            .Returns(MessageBoxResult.Yes);
            string actualInfoDialogMessage = string.Empty;

            messageSvcMoq.Setup(x => x.ShowInfoDialog(It.IsAny <string>()))
            .Callback <string>((messageBoxText) =>
            {
                Debug.WriteLine(messageBoxText);
                actualInfoDialogMessage = messageBoxText;
            })
            .Returns(MessageBoxResult.OK);

            var vm = new ViewUsrCtrlAViewModel(dialogSvcMoq.Object, messageSvcMoq.Object);

            vm.Ok2Cmd.Execute();

            messageSvcMoq.VerifyAll();  // MOQ実装した処理を通ってないテストがあるかどうか検証する。
            Assert.AreEqual("Saveしました。", actualInfoDialogMessage);
        }
        public void OkCmdTest()
        {
            //[メッセージボックス表示対応1]=======================================================================
            // ViewModelで普通のMessageBoxを使用できるが、単体テストで実行するとメッセージボックスが表示されてしまうので、そこで止まってしまう。
            // 表示されたメッセージボックスのボタンを押して閉じないと、単体テストが進まない。これでは単体テストを自動化できない。
            //====================================================================================================
            //var vm = new ViewUsrCtrlAViewModel();
            //vm.OkCmd.Execute();

            //[メッセージボックス表示対応2A&2B]===================================================================
            // MessageBox用に作成したビューをIDialogServiceで表示する。
            // テストメソッド側で、本ViewModelインスタンスを生成して本メソッドを実行することになるが、
            // IDialogServiceを使うので本ViewModelコンストラクタ引数にIDialogServiceを渡す必要がある。
            // テストメソッドで_dialogService.ShowDialogで止まらないために、MOQライブラリを利用して
            // IDialogServiceを実装したMockインスタンスを生成して、本ViewModelコンストラクタ引数に渡す。
            //====================================================================================================
            //[メッセージボックス表示対応2A]----------------------------------------------------------------------
            // IDialogServiceを実装したMockインスタンスでShowDialogの実装をしていなければ、
            // _dialogService.ShowDialogコードがスルーされるので、テストが止まることはない。
            // 但し、_dialogService.ShowDialog自体の結果をテストできない。
            //----------------------------------------------------------------------------------------------------
            //var dialogSvcMoq = new Mock<IDialogService>();
            //var vm = new ViewUsrCtrlAViewModel(dialogSvcMoq.Object);
            //vm.OkCmd.Execute();

            //[メッセージボックス表示対応2B]----------------------------------------------------------------------
            // IDialogServiceを実装したMockインスタンスでShowDialogの実装をすれば、
            // _dialogService.ShowDialog自体の結果もテストでき、テストが止まることもない。
            //----------------------------------------------------------------------------------------------------
            var dialogSvcMoq = new Mock <IDialogService>();

            dialogSvcMoq.Setup(x => x.ShowDialog(
                                   It.IsAny <string>(), // It.IsAny<T>は、T型引数なら値は何でもいいということ
                                   It.IsAny <IDialogParameters>(),
                                   It.IsAny <Action <IDialogResult> >()
                                   )).Callback <string, IDialogParameters, Action <IDialogResult> >((viewName, dialogParams, callback) =>
            {
                Assert.AreEqual(nameof(ViewUsrCtrlB), viewName);
                Assert.AreEqual("Saveします。", dialogParams.GetValue <string>(nameof(ViewUsrCtrlBViewModel.ATextBoxText)));
                Assert.AreEqual(null, callback);
            });

            var vm = new ViewUsrCtrlAViewModel(dialogSvcMoq.Object);

            vm.OkCmd.Execute();
        }