Windows Phone 8单元测试创建位图
本文关键字:创建 位图 单元测试 Phone Windows | 更新日期: 2023-09-27 18:19:18
我有一个方法,它接受一个BitmapImage
。
我试图通过创建或加载BitmapImage
来测试它,然后将其传递给所说的方法。
bitmapimage
,它抛出 InvalidCrossThreadException
。是否有任何文档或资源详细说明如何在Windows Phone 8
中使用BitmapImages
的单元测试方法。
我们使用的是Visual Studio 2012 - update 2。
BitmapImage
只能在UI线程上运行,而Unit-Test在后台线程上运行。这就是为什么会出现这个异常。对于任何涉及BitmapImage
或其他UI组件的测试,您需要:
- 使用
Dispatcher.BeginInvoke()
将UI工作推送到UI线程 - 等待UI线程结束后再完成测试。
例如,使用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;
}
}