Доступ к потоку пользовательского интерфейса в nunit - PullRequest
2 голосов
/ 15 июня 2009

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

Обновление: я использую winform. Обычный способ состоит в том, чтобы создать слой представления и написать контрольные примеры для него, но в этой ситуации у меня есть сетка, с которой мне нужно работать и для ее заполнения, его свойство DataSource необходимо установить в потоке пользовательского интерфейса.

Ответы [ 4 ]

3 голосов
/ 15 июня 2009

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

В общем, рекомендуется сделать слой UI максимально тонким, чтобы уменьшить количество UI-кода для тестирования.


Если вам действительно нужен живой элемент управления WinForms в потоке NUnit, рассмотрите возможность использования Application.DoEvents () , который будет обрабатывать все ожидающие в настоящий момент события в очереди сообщений. Имейте в виду, что это может принести вам других проблем .

2 голосов
/ 08 сентября 2010

В тесте вы можете указать атрибут 'requireSTA', который будет запускать его в том же потоке, что и пользовательский интерфейс NUnit.

Я обнаружил это, пытаясь написать тест для сообщения TIBCO Rendezvous. Слушатель должен быть настроен в основном потоке пользовательского интерфейса (виноват TIBCO, а не я!), В противном случае вызов getAutoDispatchQueueGroup возвращает ошибку «Объект не может выполнить запрошенную операцию».

Я пытался использовать WindowsFormsSynchronizationContext и BeginInvoke, но ни один из них не работал.

2 голосов
/ 15 июня 2009

Вы можете попробовать NUnit Forms , но я бы рекомендовал Дэвиду вынести как можно больше логики из слоя пользовательского интерфейса.

0 голосов
/ 15 июня 2009

NUnit не имеет встроенной поддержки AFAIK. Конечно, вы можете выполнять код в своем потоке пользовательского интерфейса, но «как» зависит от используемой вами технологии пользовательского интерфейса (WPF или Winforms)

Найдите что-то вроде BeginInvoke() и передайте ему анонимного делегата, которого вы можете определить в своем модульном тесте

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