2014-01-08 163 views

回答

1

這是我這樣做的方式。絕不是最好的或唯一的方法。

我有一個基本的功能和啓動一個靜態的公用事業類/關閉appundertest

public static class Utilities 
{ 
    private static ApplicationUnderTest App; 
    public static Launch() 
    { 
     try 
     { 
       App = ApplicationUnderTest.Launch(pathToExe); 
     } 
     catch (Microsoft.VisualStudio.TestTools.UITest.Extension.FailedToLaunchApplicationException e) {} 
    } 
    public static Close() 
    { 
     App.Close(); 
     App = null; 
    } 
} 

我所有的* .uimaps的是在「頁面」或「應用程序的屏幕」分隔基地。這有時會被編碼UI擰緊,你的*。uimaps可能會中斷。另外值得一提的是,所有的uimaps包含一個頁面上的單個動作,例如填寫登錄用戶名或點擊按鈕。

然後,我有一個NavMap類,它包含我在應用程序中執行的所有更高級別的「導航」。這可能是最好拿出一些複雜的結構,但我更喜歡在一個靜態類只列出清單方法

//you will need to include the uimap in a using statement 
public static class NavMap 
{ 
public static void Login() 
{ 
    this.credsUIMap.EnterUsername(); 
    this.credsUIMap.ENterPassword(); 
    this.credsUIMap.ClickLoginButton(); 
} 

public static void LogOut() 
{ 
    this.credsUIMap.ClickLogOutButton(); 
} 
} 

最後我在測試中形成

[TestClass] 
public class Tests 
{ 
    [TestMethod] 
    public void TestMethod1() 
    { 
     NavMap.Login(); 
    } 
    [TestMethod] 
    public void TestMethod2() 
    { 
     NavMap.LogOut 
    } 

    [ClassInitialize()] 
    public static void ClassInitialize(TestContext testcontext) 
    {   
     Utilities.Launch(); 
    } 

    [ClassCleanup()] 
    public static void ClassCleanup() 
    {   
     Utilities.Close(); 
    } 
} 

我的codedUI測試文件也做不同類型的測試(正面,負面,壓力,...)單獨的測試文件然後我將它們組合在一個有序的測試

+0

非常感謝Zaq。 – stasde

0

我使用多個項目。一個General包含其他項目的常用方法和通用UIMaps(對General項目具有各自的依賴關係)。

然後我爲每個想自動化的桌面或Web應用程序提供一個項目。在項目中: 每個窗口都有一個UIMap。然後,每個測試實例都可以使用每個測試實例。 每個測試的最佳答案。


我可以添加下面的例子:

***我不能發表圖片我目前的測試解決方案結構的又 例子:http://i.stack.imgur.com/ekniz.png

調用從記錄的動作方式方法測試將是:

#using Application.UIMaps.Common_Application_UIClasses; 
#using Application.UIMaps.Window_1_UIClases; 

... 

Common_Application_UI app_common = new Common_Application_UI(); 
Window_1_UI win1 = new Window_1_UI(); 

app_common.goToMenuThatOpenWindow1(); 

win1.setSomething("hello world!"); 
win1.exit(); 
app_common.exit(); 

也許這不是最好的工作方式,但目前這是我的方式。

爲我的英語道歉。我希望它能激勵你。

+0

非常感謝,xavilage。聽起來不錯。 – stasde

+0

讓我知道你是否想要更多細節。 – xavilage

+0

_再次感謝您的幫助,@ xavilage._ 1.您是否擁有UIMaps的基類? 2.您是否將測試和UIMaps保存在單獨的項目中? – stasde

0

我強烈推薦使用類似Code FirstCodedUI Page Modeling(我寫的)來以可測試的方式在UI上創建抽象。

即使沒有這些框架,您也可以輕鬆地在您的測試中編寫抽象概念,以便您的測試解決方案看起來與您的主要解決方案代碼非常相似。

我寫了一個blog post關於這看起來如何。

通常,我會爲應用程序中的每個主要工作流程創建一個文件夾,併爲共享創建一個文件夾。這與您的應用的MVC結構非常相似。您應用中的每個控件都將成爲測試項目中的頁面模型。

Web Project 
| 
| 
Views 
    | 
    --- Accounts 
    | | 
    | --- Create 
    | --- Manage 
    | 
    | 
    --- Products 
     | 
     --- Search 


Test Project 
    | 
    | 
    --- Page Models 
      | 
      --- Accounts 
       | 
       --- ICreateAccountPageModel (interface) 
       --- CreateAccountPageModel (coded ui implementation) 
       --- IManageAccountPageModel 
       --- ManageAccountPageModel 
      --- Products 
       | 
       --- ISearch 
       --- Search 

    | 
    --- Tests 
      | 
      --- Accounts 
       | 
       --- CreateAccountTests 
       --- ManageAccountTests 
      --- Products 
       | 
       --- SearchProductTests 

頁面模型表示正在測試的頁面(或者如果進行更現代的Web開發,則控制在測試下)。這些可以使用測試驅動方法編寫,而UI實際上尚未開發。

創建帳戶視圖將包含用戶名,密碼和確認密碼輸入。

創建帳戶頁面的模型應該用於設置輸入驗證頁面狀態,點擊註冊按鈕等

的測試將再次測試頁面模型的接口方法。該實現將使用編碼UI編寫。

如果您在您的網站中使用MVVM模式,您的頁面模型最終會看起來非常像您的視圖模型。