2010-05-26 140 views
2

我正在尝试在Visual Studio 2010项目中为WinForm创建一个单元测试。 我为我的项目添加了一个新的“编码UI测试”,打开代码文件,然后右键单击并选择“为编码UI测试生成代码” - >“使用编码UI测试生成器”。然后我开始我的应用程序,在UI Map控件上选择“Record”。我运行我的测试(在这种情况下只需选择一个文本框,键入一个随机值,他们点击一个按钮)。然后,我从UI Map控件中选择“生成代码”,生成测试将使用的代码。 当运行这个测试,我得到的错误:Visual Studio 2010中的单元测试

Test method HelloWorldTest.CodedUITest1.CodedUITestMethod1 threw exception: Microsoft.VisualStudio.TestTools.UITest.Extension.UITestControlNotFoundException: The playback failed to find the control with the given search properties. Additional Details: TechnologyName: 'MSAA' ControlType: 'Window' Name: 'Form1' ClassName: 'WindowsForms10.Window' ---> System.Runtime.InteropServices.COMException: Error HRESULT E_FAIL has been returned from a call to a COM component.

有谁知道我要去的地方错了吗?

感谢

+0

我在微软的一个活动上看到了这项技术的演示。它看起来很酷。我希望它不会太难。 : -/ – 2010-05-26 14:57:09

+3

顺便说一句,“单元测试”通常是指单独测试一种方法。编码的UI测试可能适合“集成测试”类别。 – 2010-05-26 14:58:33

回答

1

我相信你的问题是与窗口的标题。您会发现Visual Studio会为您的应用程序中生成的每个新窗口提供一个窗口标题。当你记录你的测试时,你的窗口标题是“Form1”。它是这么说的在你的错误信息:

ControlType:“窗口”名称:“Form1的”

所以,你有什么需要确定的是,如果你的应用程序中每个打开一个新的窗口时间(最有可能重命名窗口一样)。例如,如果你打开第二个窗口,它可能被称为“Form2”。

为了使编码的UI测试正常工作,它需要知道在哪里寻找某些控件来执行其操作。所以,它需要知道窗口标题能够“选择一个文本框,输入一个随机值,他们点击一个按钮。”

我发现解决这个问题的唯一方法是手动设置窗口标题,如果我知道它已经改变,或将改变。

this.UIMap.UIHighCapitalFranchiseWindow.UIHighCapitalFranchiseDocument.UICtl00ContentPlaceHolComboBox.WindowTitles.Clear(); 
this.UIMap.UIHighCapitalFranchiseWindow.UIHighCapitalFranchiseDocument.UICtl00ContentPlaceHolComboBox.WindowTitles.Add("Franchises for Sale"); 

正如你所看到的,我只是清除在控制的WindowTitles属性的所有值,然后添加正确的标题,一个我知道它应该的。在上面的例子中,它的组织方式如下:

this。(你的uimap文件的名称)。(窗口的名称)。(窗口中文档的名称)。(某个控件的名称(组合框,单选按钮,文本框等))。WindowTitles。(清除或添加)();

这段代码可以直接在编码的ui测试文件中,或者如果您想使用部分类UIMap.cs(不是自动生成的,UIMap.Designer.cs是自动生成的)更改为UIMap。如果您选择后者,请记住删除“.UIMap”。

相关问题