2015-03-19 99 views
0

我正在使用CodedUI進行自動化測試。由於我使用兩個應用程序,假設A和B. A需要在每個測試用例的執行開始時啓動。所以我把它放在TestInitialize中。所以我從TestInitialize中調用一個函數併發送參數,即應用程序A的位置。但是如果有不同版本的App a,我又想發送一個參數給TestInitialize。我們可以發送一個參數給C#中的TestInitialize嗎?

我現在的代碼是

[TestInitialize()] 
public void MyTestInitialize() 
{ 
    App_Launch(@"C:\Emulator\App_Version1\Launch_App.exe"); 
} 

有差異的應用程序版本 所以,如果我要開始App_Version2以後,我在其中硬編碼參數更改文件夾名稱。

如果我想以下

[TestInitialize()] 
public void MyTestInitialize(string Path) 
{ 
    App_Launch(@Path); 
} 

發送路徑TestInitialize

+0

好的,我做到了。但是現在如何發送參數默認?如何調用帶有** xUnit **測試框架的路徑 – 2015-03-19 06:40:27

+0

的TestInitialize,您可以使用[[Theory]對此 – DrKoch 2015-03-19 06:41:00

+0

使用CodedUI Im – 2015-03-19 06:41:36

回答

5

您不能將參數添加到標有TestInitializeAttribute的方法,但也有一些替代品。

  1. 如果你有許多的版本1測試和一些版本2,最好的選擇(IMO)是簡單地創建兩個不同的測試類。

  2. 您可以根本不使用[TestInitialize],並在每次測試開始時調用兩個私有方法之一,每個方法啓動相應的應用程序。

  3. 您可以以某種方式使用TestContext屬性。它在測試執行之前自動設置,可以通過TestInitialize方法訪問。其中的信息可能會爲您提供足夠的信息來決定啓動哪個應用程序。我不確定有沒有很好的理由選擇這個選項。

  4. 如果所有測試都需要在兩個版本上執行,則可以使用data driven test。這允許您使用不同的輸入多次執行單個測試。這也需要TestContext屬性。但是,我個人發現MSTest可怕的數據驅動測試。它需要使用DataSourceAttribute,除非您的目標是Windows Store應用程序。

  5. 使用繼承。將所有需要爲兩個版本執行的測試都放在基類中,不需要[TestInitialize]。只將測試初始化​​放在兩個繼承的類中。不要用TestClassAttribute來標記基類,並且最好使其成爲abstract,這樣測試不會在沒有任何形式的初始化的情況下運行。

這一切都取決於情況,真的。如果您覺得自己真的需要選項4,而且您不是針對Windows Store的,那麼我會認真考慮NUnit,它提供了更靈活的參數化測試。

+0

我可以使用Coded UI DataSourceAttribute將數據源添加到TestInitialize方法嗎?實際上,我嘗試了同樣的方法,但TestInitialize方法中定義的變量正在從測試方法的數據源中選擇值,而我希望它們從TestInitialize的數據源中選擇值。總之,我想爲TestInitialize方法有單獨的數據源,這有可能嗎? – Dhiman 2015-12-17 15:53:38

相關問題