Как получить Ctrl + Tab и Ctrl + Сдвиг + Вкладка в WPF?

Вы можете, но, вероятно, не хотите:

ComplexConstructor partialMock =
    Mockito.mock(ComplexConstructor.class, CALLS_REAL_METHODS);

Этот экземпляр «частичного макета» не будет вызывать свой конструктор или инициализаторы поля, но все вызовы тестируемая система будет вызывать реальное поведение класса. (Технически класс также будет иметь свои переопределенные equals и hashCode для целей Мокито, и класс будет сгенерированным подклассом ComplexConstructor вместо самого ComplexConstructor.)

Таким образом, вы можете быть изолированы из конструктора, но поскольку вы подавляете произвольное подмножество поведения тестируемого класса, гораздо труднее точно определить, что вы тестируете , чтобы быть уверенным, что система работает потому что тест проходит . Это должно быть вашей главной целью в тестировании, и может быть трудно достичь этого с частичной имитацией. Коллеги или сотрудники могут справедливо заметить, что вам не следует издеваться над тестируемой системой именно по этой причине.

Хотя лично я не думаю, что для вас неправильно или неожиданно нужно менять свои модульные тесты для предоставления имитаций при необходимости, вы можете создать фабрику отдельно от вашего теста, которая будет предоставлять экземпляры тестирования ComplexConstructor, или рассмотреть возможность использования зависимости каркас для инъекций, который автоматически поставляет макеты в тестируемую систему.

65
задан Peter Mortensen 28 September 2014 в 08:52
поделиться

3 ответа

What KeyDown handler did you have? The code below works for me. The one that gives me trouble is: Alt + Tab, but you didn't ask for that :D

public Window1()
{
   InitializeComponent();
   AddHandler(Keyboard.KeyDownEvent, (KeyEventHandler)HandleKeyDownEvent);
}

private void HandleKeyDownEvent(object sender, KeyEventArgs e)
{
   if (e.Key == Key.Tab && (Keyboard.Modifiers & (ModifierKeys.Control | ModifierKeys.Shift)) == (ModifierKeys.Control | ModifierKeys.Shift))
   {
      MessageBox.Show("CTRL + SHIFT + TAB trapped");
   }

   if (e.Key == Key.Tab && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
   {
      MessageBox.Show("CTRL + TAB trapped");
   }
}
92
ответ дан 24 November 2019 в 15:23
поделиться

Вы должны использовать событие KeyUp , а не KeyDown ...

8
ответ дан 24 November 2019 в 15:23
поделиться

Ответ Густава был именно тем, что я искал. Мы хотим проверить ключи ввода, но все же разрешить вставку:

protected override void OnPreviewKeyDown(KeyEventArgs e)
{
   if ((e.Key == Key.V || e.Key == Key.X || e.Key == Key.C) && Keyboard.IsKeyDown(Key.LeftCtrl))
      return;
}
31
ответ дан 24 November 2019 в 15:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: