Фон
Я хотел бы автоматически протестировать классы Windows Form в своем проекте. Я хотел бы провести такие тесты, как «Если была нажата кнопка F5
, была ли выполнена функция xyz?».
Для этого мне нужно инициировать события щелчка мышью или клавиатуры.
Окружающая среда
- Графический интерфейс: Windows Forms
- Среда тестирования: MSTests
- Стиль тестирования: я не тестирую независимый исполняемый файл
Вопрос
Как я могу инициировать события щелчка мышью или клавиатуры в элементе управления?
+α: Как инициировать любое произвольное событие на произвольном элементе управления?
Конкретный пример
У меня есть GridDataView
в продуктивной форме. В моем тесте я запускаю view.Row (0).selected = True
, чтобы выбрать первую строку. Теперь я хочу инициировать событие двойного щелчка и событие Key Keys.Enter
, чтобы имитировать эти взаимодействия с пользователем.
Что я уже пробовал
view.PerformDoubleClick()
view.DoubleClick (Nothing,Nothing)
view.OnDoubleClick (Nothing)
RaiseEvent DoubleClick (Nothing,Nothing)
RaiseEvent view.DoubleClick (Nothing,Nothing)
Ни один из этих методов не сработал; некоторые даже не компилируются
В этой статье Microsoft указывается, что то, что я пытаюсь выполнить, может оказаться невозможным
Событие может быть вызвано только из пространства объявления, в котором оно объявлено. Следовательно, класс не может вызывать события из любого другого класса, даже из того, от которого он является производным.
Вы спрашиваете здесь об автоматических тестах пользовательского интерфейса? Если это так, я действительно предостерег бы от встраивания чего-либо непосредственно в ваше программное обеспечение, поскольку вы можете обнаружить, что это либо вызывает несущественные ошибки, либо скрывает настоящие ошибки. На самом деле нет никакой альтернативы тому, чтобы просто засучить рукава и сделать это самостоятельно. Тем не менее, уже доступно множество инструментов для автоматизированного тестирования графического интерфейса.
Возможно недоразумение. Я попытался уточнить вопрос: я не тестирую exe, но тестирую MSTest в стиле модульного теста.
Вы не используете модульные тесты или что-то вроде модульных тестов для тестирования пользовательского интерфейса. Сделайте, как уже было сказано, изучите инструменты автоматизированного тестирования графического интерфейса.
Эти предложения идут в ОТ. Я не хочу использовать новый инструмент для чего-то, что я мог бы сделать в виде простого модульного теста.
Это не модульный тест. Вы не должны быть в состоянии сделать это как модульный тест. Тема неправильная, поэтому предложение ОТ. Если вы спросите, как поступить неправильно, не удивляйтесь, если вместо этого люди скажут вам поступать правильно.