У меня есть класс "команды":
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% покрытия моими модульными и интеграционными тестами. Я также хотел бы иметь 100% соответствие предупреждениям StyleCop и FxCop. И я пойман здесь.
Мой метод MainWindow.Exit()
является закрытым в соответствии с рекомендациями FxCop (Microsoft.Security:CA2109), но это означает, что я не могу вызвать его непосредственно из теста. Я полагаю, я мог бы сделать это общедоступным и скрыть сообщение FxCop. Или я могу использовать аксессуар. Но у меня есть предубеждение против написания тестов непосредственно против закрытых методов, особенно в этом случае, поскольку все, что нужно сделать, это проверить метод, а не саму привязку команды.
Я чувствую, что должен быть какой-то другой способ вызвать команду из моего тестового кода, чтобы я мог убедиться, что команда работает должным образом (помимо тестирования вручную). Какие-либо предложения?