Создание Fake для класса, который использует Prism и запрашивает события с ThreadOption.UIThread

Мы находимся в процессе перехода от Prism 4.1 к 5. Один из всплывающих вопросов - это создание Stub EventAggregator (Microsoft Fakes) для нашего модульного теста. EventAggregator устанавливается в целевом классе, а некоторые подписчики устанавливают

_eventAggregator.GetEvent<RangeChangedEvent>().Subscribe(UpdateDisplay,
                    ThreadOption.UIThread,
                    false,
                    args => args.ID == ID);

Модульный тест отлично работал с Prism 4.1. Но теперь я получаю это исключение в Prism 5 при запуске модульного теста.

System.InvalidOperationException: чтобы использовать параметр UIThread для подписки, EventAggregator должен быть построен в потоке пользовательского интерфейса.

Итак, есть ли способ получить ссылку на то, что Prism считает потоком пользовательского интерфейса? Или способ сказать призме, что поток модульного теста - это поток пользовательского интерфейса? Или мне нужно подписаться на поток публикации и протестировать Диспетчер в методе «UpdateDisplay»?

Спасибо.


person doobop    schedule 06.11.2014    source источник
comment
Работа с xUnit здесь ... И пока безуспешно, пришлось использовать Mocked-сервис, который использует Dispatcher в текущем приложении, что позволяет мне удалить ThreadOption.UIThread и по-прежнему запускать мой метод в потоке пользовательского интерфейса.   -  person RamenTurismo    schedule 21.05.2019


Ответы (1)


Если вы используете Nunit, вы можете украсить свой тестовый класс фикстуры атрибутом RequiresSTA, и это заставит testrunner использовать поток пользовательского интерфейса, и, надеюсь, это должно решить проблему для вас.

person Vasudevan Kannan    schedule 14.04.2015