Тестирование пользовательского элемента управления WinForms - дочерний элемент управления остается скрытым - PullRequest
2 голосов
/ 06 июля 2011

Я пишу пользовательский элемент управления WinForms на C # и хочу его протестировать (не TDD, я начал с того, что написал компонент и заставил его работать, но я устал от поиска ошибок, так что теперь я хочу тесты).Моя проблема в том, что я не могу сделать дочерний элемент управления (всплывающее меню) видимым во время тестирования.(Я понимаю, что он не будет отображаться - я не хочу , чтобы он появился, но я все еще хочу убедиться, что он будет отображаться при нормальной работе.)

Вот соответствующий тестовый код:

  updater.Raise(it => it.StateChanged += null, AutoUpdaterState.Ok);

[Примечание: выше приведен код Moq, который вызовет событие;это работает, просто проигнорируйте детали и подумайте, «событие, которое заставит меню стать видимым, вызвано».]

  Assert.IsTrue(sut.checkToolStripMenuItem.Visible);

А вот соответствующий код в элементе управления:

      checkToolStripMenuItem.Visible = true;

Проблема в том ... Я поставил точку останова на этой строке, и Visible остается ложным после того, как я ее запустил.Я понимаю, что это, вероятно, потому, что я тестирую его, и меню на самом деле не становится видимым ... это нормально, но как мне это проверить?

1 Ответ

1 голос
/ 06 июля 2011

При тестировании кода пользовательского интерфейса часто гораздо проще, если он правильно структурирован с использованием какого-либо шаблона MVC, например, MVP для WinForms (если вы этого еще не сделали).

Когда вы пишете эти тесты, у вас не должно быть ссылок на WinForms в вашем тестовом проекте. У меня обычно есть метод для представления, для вашего примера это будет ShowPopupMenu (). Я проверяю, что при определенных обстоятельствах докладчик будет вызывать этот метод. Я не тестирую конкретный метод, потому что я оставляю эти простые вещи в пользовательском интерфейсе, так или иначе, 99% логики в презентере; и для отображения всплывающего меню требуется одна строка кода ...

Однако, если у вас нет MVP, есть несколько библиотек, которые могут помочь вам протестировать WinForms, например NUnitForms .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...