2014-01-08 123 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模式,您的页面模型最终会看起来非常像您的视图模型。