Вы можете, но, вероятно, не хотите:
ComplexConstructor partialMock =
Mockito.mock(ComplexConstructor.class, CALLS_REAL_METHODS);
Этот экземпляр «частичного макета» не будет вызывать свой конструктор или инициализаторы поля, но все вызовы тестируемая система будет вызывать реальное поведение класса. (Технически класс также будет иметь свои переопределенные equals
и hashCode
для целей Мокито, и класс будет сгенерированным подклассом ComplexConstructor вместо самого ComplexConstructor.)
Таким образом, вы можете быть изолированы из конструктора, но поскольку вы подавляете произвольное подмножество поведения тестируемого класса, гораздо труднее точно определить, что вы тестируете , чтобы быть уверенным, что система работает потому что тест проходит . Это должно быть вашей главной целью в тестировании, и может быть трудно достичь этого с частичной имитацией. Коллеги или сотрудники могут справедливо заметить, что вам не следует издеваться над тестируемой системой именно по этой причине.
Хотя лично я не думаю, что для вас неправильно или неожиданно нужно менять свои модульные тесты для предоставления имитаций при необходимости, вы можете создать фабрику отдельно от вашего теста, которая будет предоставлять экземпляры тестирования ComplexConstructor, или рассмотреть возможность использования зависимости каркас для инъекций, который автоматически поставляет макеты в тестируемую систему.
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");
}
}
Вы должны использовать событие KeyUp
, а не KeyDown
...
Ответ Густава был именно тем, что я искал. Мы хотим проверить ключи ввода, но все же разрешить вставку:
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
if ((e.Key == Key.V || e.Key == Key.X || e.Key == Key.C) && Keyboard.IsKeyDown(Key.LeftCtrl))
return;
}