У меня есть класс "команд":
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. Или я могу использовать аксессор. Но у меня есть предубеждение против написания тестов непосредственно против частных методов, особенно в этом случае, поскольку все, что делает, это проверяет метод, а не саму привязку команды.
Мне кажется, что должен быть какой-то другой способ вызова команды из моего тестового кода, чтобы я мог проверить, что команда работает, как предполагалось (помимо тестирования вручную). Есть предложения?