unit testingWindows 8 Store App UI(Xaml控件)

我一直在创建一个Windowsapp store应用程序,但是我测试了一个创建网格(这是一个XAML控件)的方法的线程问题。 我试过使用NUnit和MSTest进行测试。

测试方法是:

[TestMethod] public void CreateThumbnail_EmptyLayout_ReturnsEmptyGrid() { Layout l = new Layout(); ThumbnailCreator creator = new ThumbnailCreator(); Grid grid = creator.CreateThumbnail(l, 192, 120); int count = grid.Children.Count; Assert.AreEqual(count, 0); } 

和creator.CreateThumbnail(抛出错误的方法):

 public Grid CreateThumbnail(Layout l, double totalWidth, double totalHeight) { Grid newGrid = new Grid(); newGrid.Width = totalWidth; newGrid.Height = totalHeight; SolidColorBrush backGroundBrush = new SolidColorBrush(BackgroundColor); newGrid.Background = backGroundBrush; newGrid.Tag = l; return newGrid; } 

当我运行此测试时,它会抛出此错误:

 System.Exception: The application called an interface that was marshalled for a different thread. (Exception from HRESULT: 0x8001010E (RPC_E_WRONG_THREAD)) 

您的控件相关代码需要在UI线程上运行。 尝试:

 [TestMethod] async public Task CreateThumbnail_EmptyLayout_ReturnsEmptyGrid() { int count = 0; await ExecuteOnUIThread(() => { Layout l = new Layout(); ThumbnailCreator creator = new ThumbnailCreator(); Grid grid = creator.CreateThumbnail(l, 192, 120); count = grid.Children.Count; }); Assert.AreEqual(count, 0); } public static IAsyncAction ExecuteOnUIThread(Windows.UI.Core.DispatchedHandler action) { return Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, action); } 

以上内容适用于MS Test。 我不知道NUnit。