2014-10-09 66 views
0

我在编码UI测试中创建一个TestMethod,它将访问我的Windows Phone 8.1应用程序中的UI控件。我使用了异步方法执行多线程任务处理,但我得到了像这样我的代码异常:编码UI测试中的TestMethod

 [TestMethod] 
      async public Task CodedUITestMethod1() 
      { 
       XamlWindow.Launch("{556EE9D4-5640-4120-9916-44B1CA27352F}:App:556ee9d4-5640-4120-9916-44b1ca27352f_tpza89sffjg1j!App");    
       await ExecuteOnUIThread(() => 
       { 
        MainPage mainPage = new MainPage(); 
        Microsoft.VisualStudio.TestTools.UITest.Input.Point point = new Microsoft.VisualStudio.TestTools.UITest.Input.Point(mainPage.getX(), mainPage.getY()); 
        Gesture.Tap(point); 
       } 
        ); 
} 

public static IAsyncAction ExecuteOnUIThread(Windows.UI.Core.DispatchedHandler action) 
     { 
      return Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, action); 
     } 

,但我得到的异常消息是:测试名称:CodedUITestMethod1 测试真实姓名:CodedUITestProject2.CodedUITest1.CodedUITestMethod1 测试来源:C:\用户\青\桌面\计算器\ CodedUITestProject2 \ CodedUITest1.cs:行28 测试结果:失败 测试时间:0:00:02.3440269

结果消息: 测试方法CodedUITestProject2.CodedUITest1.CodedUITestMethod1抛出异常: System.InvalidOperationException:在意外的时间调用方法。

一个方法在意想不到的时间被调用。 结果堆栈跟踪:
在Windows.ApplicationModel.Core.CoreApplication.get_MainView() 在CodedUITestProject2.CodedUITest1.ExecuteOnUIThread(DispatchedHandler动作) 在CodedUITestProject2.CodedUITest1.d__2.MoveNext() ---从先前堆栈跟踪结束其中引发异常--- 在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务task) 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务的任务)的位置
所以,我怎么能解决这个问题?请帮帮我。

回答

0

编码UI测试旨在由Visual Studio中的编码UI测试控制机制或相关程序(如mstest.exe)调用。所有我见过的编码的UI测试有这样的代码:

[TestMethod] 
public void CodedUITestMethod1() { ... } 

他们也可以有一个[DataSource(...)]属性。您尝试的方法有一个非常不同的类型:

[TestMethod] async public Task CodedUITestMethod1() { ... } 

我还没有看到任何文档或示例暗示此类方法可以与编码UI一起使用。

[TestMethod]之内调用XamlWindow.Launch(...)表明您试图将编码的UI测试和应用程序一起构建到一个程序中,然后通过调用该程序中的方法来获取测试以调用应用程序。这不是如何使用编码UI的。编码的UI测试套件应作为单独的程序(实际上是由Visual Studio调用的DLL,由mstest.exe或类似的)从正在测试的应用程序创建。编码UI然后作为程序运行应用程序(而不是通过调用应用程序中的方法)。编码UI测试然后通过阅读屏幕和发送键盘输入和鼠标点击到程序来与程序交互。