C# VisualStudio2010中的单元测试

C# VisualStudio2010中的单元测试,c#,.net,vb.net,visual-studio,coded-ui-tests,C#,.net,Vb.net,Visual Studio,Coded Ui Tests,我正试图在VisualStudio2010项目中为WinForm创建一个单元测试。 我向我的项目中添加了一个新的“编码UI测试”,打开代码文件,然后右键单击并选择“为编码UI测试生成代码”->“使用编码UI测试生成器”。然后启动应用程序,在UI地图控件上选择“记录”。我运行我的测试(在本例中,只需选择一个文本框,输入一个随机值,然后单击一个按钮)。然后,我从UI映射控件中选择“GenerateCode”,该控件生成测试将使用的代码。 运行此测试时,我得到错误: 试验方法 HelloWorldTe

我正试图在VisualStudio2010项目中为WinForm创建一个单元测试。 我向我的项目中添加了一个新的“编码UI测试”,打开代码文件,然后右键单击并选择“为编码UI测试生成代码”->“使用编码UI测试生成器”。然后启动应用程序,在UI地图控件上选择“记录”。我运行我的测试(在本例中,只需选择一个文本框,输入一个随机值,然后单击一个按钮)。然后,我从UI映射控件中选择“GenerateCode”,该控件生成测试将使用的代码。 运行此测试时,我得到错误:

试验方法 HelloWorldTest.CodedUITest1.CodedUITestMethod1 引发异常: Microsoft.VisualStudio.TestTools.UITest.Extension.UITestControlNotFoundException: 播放过程中找不到目标 使用给定搜索的控件 财产。其他详情: 技术名称:“MSAA”控制类型: “窗口”名称:“Form1”类名称: “WindowsForms10.Window”--> System.Runtime.InteropServices.COMException: 返回错误HRESULT E_FAIL 从对COM组件的调用

有人知道我哪里出错了吗


谢谢

我相信你的问题在于窗口标题。您可以看到,VisualStudio将为应用程序中生成的每个新窗口提供一个窗口标题。记录测试时,窗口的标题为“Form1”。它在您的错误消息中这样说:

控件类型:“窗口”名称:“窗体1”

因此,您需要确定的是,应用程序是否在每次打开新窗口时重命名该窗口(很可能是这样)。例如,如果打开第二个窗口,它可能被称为“Form2”

为了使编码的ui测试正常工作,它需要知道在哪里寻找某些控件来执行其操作。因此,它需要知道窗口标题才能“选择一个文本框,输入一个随机值,然后单击一个按钮。”

我发现解决此问题的唯一方法是,如果我知道窗口标题已更改或将更改,则手动设置窗口标题

this.UIMap.UIHighCapitalFranchiseWindow.UIHighCapitalFranchiseDocument.UICtl00ContentPlaceHolComboBox.WindowTitles.Clear();
this.UIMap.UIHighCapitalFranchiseWindow.UIHighCapitalFranchiseDocument.UICtl00ContentPlaceHolComboBox.WindowTitles.Add("Franchises for Sale");
如您所见,我只是清除控件的WindowTitles属性中的所有值,然后添加正确的标题,我知道它应该是。在上述示例中,其组织如下:

(uimap文件的名称)。(窗口的名称)。(窗口中文档的名称)。(特定控件的名称(组合框、单选按钮、文本框等))。窗口标题。(清除或添加)()


此代码可以直接在编码的ui测试文件中执行,或者如果您希望使用部分类UIMap.cs(非自动生成的类,UIMap.Designer.cs是自动生成的类)对UIMap进行更改。如果选择后者,请记住删除“.UIMap”。

我在微软的一次活动中看到了这项技术的演示。看起来很酷。我希望它不会太难实现-/顺便说一下,“单元测试”通常是指单独测试单个方法。编码的UI测试可能属于“集成测试”类别。