2013-03-18 41 views
0

我想在單個測試中啓動待測應用程序,並在其他測試中使用打開的應用程序。這是因爲啓動應用程序需要相當長的一段時間,如果我爲每個測試重複一遍,它可能會很昂貴。我希望在對象圖中有一個由AUT的單個對象,並與UI地圖對象一起初始化。在多個編碼的UI測試之間共享被測試對象下的應用程序

此方法失敗,因爲對象不在不同測試之間傳遞,即使它是靜態的。有沒有解決這個問題的方法?

的UIMap

public partial class UIMap 
{ 
    public ApplicationUnderTest _aut { get; set; } 

    public void AUT_Open() 
    { 
     string AUTExecutable = ConfigurationManager.AppSettings["AUTExecutable"]; 
     _aut = ApplicationUnderTest.Launch(AUTExecutable); 
    } 
    ... 
} 

測試

private static UIMap map; 

[TestMethod] 
public void Test01() 
{ 
    ... 
    this.UIMap.RecognitionDesigner_Open(); 
} 

[TestMethod] 
public void Test02() 
{ 
    //Do something on the UIMap that tries to use the same member variable- _aut 
    //in the UIMap 
} 

回答

1

我能夠通過使用_aut.CloseOnPlaybackCleanup = false;解決此問題。顯然,對每個測試方法結束時,對UIMap對象的引用似乎都會丟失。

public partial class UIMap 
{ 
    public ApplicationUnderTest _aut { get; set; } 

    public void AUT_Open() 
    { 
     string AUTExecutable = ConfigurationManager.AppSettings["AUTExecutable"]; 
     _aut = ApplicationUnderTest.Launch(AUTExecutable); 
     _aut.CloseOnPlaybackCleanup = false; 
    } 
    ... 
} 
0

測試彼此獨立運行和的UIMap被重建上每個測試。 我建議使用ClassInitialize屬性,因爲使用此屬性標記的方法只在類中的所有測試之前執行一次。你將會絕對確信你的過程將被啓動,因爲現在你依賴於測試的執行順序,這是不好的。

private static TestContext contextSave; 

[ClassInitialize] 
public static void DoOneTime(TestContext context) 
{ 
    string AUTExecutable = ConfigurationManager.AppSettings["AUTExecutable"]; 
    _aut = ApplicationUnderTest.Launch(AUTExecutable); 
    context.Properties.Add("AUT", _aut); 
    contextSave = context; 
} 

[TestMethod] 
public void Test01() 
{ 
    //... 
    DoSthmWithAUT(context.Properties["AUT"]); 
} 

[TestMethod] 
public void Test02() 
{ 
    DoOtherWithAUT(context.Properties["AUT"]); 
} 
[ClassCleanup] 
public static void Cleanup() 
{ 
    contextSave = null; 
} 

請注意,一般情況下,您將無法判斷Test01是否在Test02之前和之前運行。如果你真的想要訂單 - 然後使用Ordered Tests

+0

感謝您的輸入。我嘗試了你所說的,但不幸的是,被測試的應用程序仍在關閉。 AFAIK,在每次測試/ ClassInitialze /之後,對UIMap對象的引用都會丟失。因此,在UIMap對象中初始化的AUT也被關閉。但是我可以通過使用'_aut.CloseOnPlaybackCleanup = false;'來解決這個問題。 – Bala 2013-03-21 08:32:17

0

我有同樣的問題,即在第一種測試方法中初始化的AUT對象在第二種方法中爲NULL。我嘗試了很多東西,但只有一個幫助我: 我不得不使類的奧特屬性靜態

這是我使用計算器應用程序的非常簡單的代碼。

using System; 
using Microsoft.VisualStudio.TestTools.UITesting; 
using Microsoft.VisualStudio.TestTools.UITesting.WpfControls; 
using Microsoft.VisualStudio.TestTools.UITesting.WinControls; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using Microsoft.VisualStudio.TestTools.UITest.Extension; 
using Keyboard = Microsoft.VisualStudio.TestTools.UITesting.Keyboard; 

namespace CUIT 
{ 
    [CodedUITest] 
    public class UITestDemo 
    { 
     private readonly string path = @"C:\Windows\SysWOW64\calc.exe"; 
     static ApplicationUnderTest app = null; 

     [TestMethod] 
     public void Start() 
     { 
      app = ApplicationUnderTest.Launch(path); 
      Playback.Wait(1000); 
      app.CloseOnPlaybackCleanup = false; 
      app.SearchProperties[ApplicationUnderTest.PropertyNames.Name] = "Calculator"; 
      app.SearchProperties[ApplicationUnderTest.PropertyNames.ClassName] = "CalcFrame"; 
     } 

     [TestMethod] 
     public void TestButtonOne() 
     { 
      Assert.IsNotNull(app, "Should not be NULL!"); 
      app.SetFocus(); 
      WinButton btn1 = new WinButton(app); 
      btn1.SearchProperties[WinButton.PropertyNames.Name] = "1"; 
      Mouse.Click(btn1); 
      Mouse.Click(btn1); 
      Mouse.Click(btn1); 
      Playback.Wait(3000); 
     } 
    } 
} 
相關問題