2010-05-26 206 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」。