Windows Phone 8 Unit Test, создающий битовый образ
У меня есть метод, который принимает BitmapImage
,
Я пытаюсь проверить это, создав или загрузив BitmapImage
а затем передать его указанному методу.
Тем не менее, модульный тест не позволяет мне создать bitmapimage
Кидает InvalidCrossThreadException
,
Есть ли какая-либо документация или ресурс, в котором подробно описываются методы юнит-тестирования, которые принимают BitmapImages
в Windows Phone 8
,
Мы используем Visual Studio 2012 - обновление 2.
1 ответ
BitmapImage
может выполняться только в потоке пользовательского интерфейса, а модульный тест выполняется из фонового потока. Вот почему вы получаете это исключение. Для любых испытаний с участием BitmapImage
или другой компонент пользовательского интерфейса, вам нужно:
- Вставьте работу пользовательского интерфейса в поток пользовательского интерфейса, используя
Dispatcher.BeginInvoke()
- Дождитесь завершения потока пользовательского интерфейса перед завершением теста.
Например, используя ManualResetEvent
(семафор) для выполнения межпотоковой сигнализации и проверки того, что любые (перехватываемые) исключения передаются обратно в тестовый поток...
[TestMethod]
public void TestMethod1()
{
ManualResetEvent mre = new ManualResetEvent(false);
Exception uiThreadException = null;
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
try
{
BitmapImage bi = new BitmapImage();
// do more stuff
// simulate an exception in the UI thread
// throw new InvalidOperationException("Ha!");
}
catch (Exception e)
{
uiThreadException = e;
}
// signal as complete
mre.Set();
});
// wait at most 1 second for the operation on the UI thread to complete
bool completed = mre.WaitOne(1000);
if (!completed)
{
throw new Exception("UI thread didn't complete in time");
}
// rethrow exception from UI thread
if (uiThreadException != null)
{
throw uiThreadException;
}
}