Как программно щелкнуть текстовый блок?

#c# #wpf #unit-testing

#c# #wpf #модульное тестирование

Вопрос:

У меня есть TextBlock MouseDown событие:

 tb.MouseDown  = (s, e) => {
  ToSp.Children.Add(CreateTbAlp((s as TextBlock).Text, ToSp));
  CheckAnswer();
};
 

И в модульном тестировании мне нужно его протестировать. Я пытался:

 TextBlockAutomationPeer peer = new TextBlockAutomationPeer(tb);
IInvokeProvider invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;
invokeProv.Invoke();
 

Но в этом случае я получаю сообщение об ошибке

Исключение System.NullReferenceException

то же самое с этим

 typeof (TextBlock)
  .GetMethod("MouseDown", BindingFlags.Instance | BindingFlags.NonPublic)
  .Invoke(tb, new object[0]);
 

Есть ли другой способ щелкнуть TextBlock программно?

Комментарии:

1. Вся цель WPF и шаблона проектирования MVVM состоит в том, чтобы не делать безбожных взломов такого рода. Вы уверены, что именно так вы хотите создать свое приложение и именно так вы хотите его протестировать?

2. Или задать те же вопросы, используя разные слова: почему вы решили использовать Microsoft UI Automation API?

Ответ №1:

 TextBlock.RaiseEvent(new RoutedEventArgs(TextBlock.MouseDown));