2

「コマンド」クラスがあります:

public static class MyCommands
{
    private static ICommand exitCommand = new RoutedCommand();

    public static ICommand ExitCommand { get { return exitCommand; } }
}

MainWindow.xaml.cs の分離コード:

private void BindCommands()
{
    this.CommandBindings.Add(new CommandBinding(MyCommands.ExitCommand, this.Exit));
}

private void Exit(object sender, ExecutedRoutedEventArgs e)
{
    Application.Current.Shutdown();
}

また、メニュー バーを実装するユーザー コントロール内の XAML は次のとおりです。

<MenuItem Header="_Exit"
          Command="{x:Static local:MyCommands.ExitCommand}"
          />

コードは機能します。全体的なパターンが気に入っているので、使い続けたいと思っています。

ただし、テスト駆動開発を行い、単体テストと統合テストで 100% のカバレッジを達成するなど、他の目標も追求しようとしています。また、StyleCop と FxCop の警告に 100% 準拠したいと考えています。そして、私はここで捕まっています。

FxCop (Microsoft.Security:CA2109) で推奨されているように、私のMainWindow.Exit()メソッドは非公開ですが、これはテストから直接呼び出すことができないことを意味します。公開して FxCop メッセージを非表示にできると思います。または、アクセサーを使用できます。しかし、私はプライベート メソッドに対して直接テストを書くことに偏見を持っています。特にこの場合は、コマンド バインディング自体ではなく、メソッドをテストするだけなので。

コマンドが意図したとおりに機能することを確認できるように、テストコードからコマンドを呼び出す他の方法が必要だと感じています(手動でテストする以外に)。助言がありますか?

4

2 に答える 2

5

これは古い質問だと思いますが、他の人の役に立つ場合に備えて答えると思いました。

これにより、コードビハインドからコマンドを呼び出すことができます。

ICommand command = ExitCommand;

command.Execute();

これによりExit()が実行され、アクセサーは必要ありません。これはあなたが探していたものですか?

于 2010-07-18T22:21:42.850 に答える
0

MVVMなどの個別のプレゼンテーション パターンを使用すると、コマンドの背後にあるロジックを含め、コードの大部分をテストできます。その後、ビューは大幅に簡素化され、単体テストの重要性が低くなります。MVVM と関連するパターンをよく読んでおくことをお勧めします。

于 2009-09-16T21:54:22.560 に答える