2017-06-20 17 views
0

私はMicrosoftのWinAppDriverとVisual Studio 2015ユニットテストを組み合わせて使用​​して、Windowsアプリケーションのテストを自動化しています。これらのテストは、VSTest.exeを使用してコマンドラインから実行されています。これは、.runsettingsファイルをパラメータとして渡して、今後変更する必要のあるテスト設定を指定できるためです。 Setupメソッドでコードの先頭に大量のグローバル変数を作成することなく、テストメソッドから.runsettingsファイルを直接参照できます。私は複数のクラスを使用して、私は多かれ少なかれので、同じようにそれをやっておりますが:C#ユニットテストメソッドの.runsettingsファイル値を参照するには?

protected static string basicFile; 

[ClassInitialize] 
public static void Setup(TestContext context) 
{ 
var basicFile = context.Properties["basic"].ToString(); 
} 

[TestMethod] 
public void BasicTest(){ 
OpenFile(basicFile); 
} 

context.Properties []私の.runsettingsファイル内のキーを参照ところ。試験方法は、任意のパラメータを受け入れることができないので、私は単に

[TestMethod] 
public void BasicTest(TestContext context){ 
var basicFile = context.Properties["basic"].ToString(); 
OpenFile(basicFile); 
} 

を行うことができない理由がある

。ですから、context.Propertiesを使わずにテストメソッド内で.runsettingsファイルを直接参照できる方法はありますか?

答えて

0

私はちょうどJavaからC#プロジェクトに切り替えて、私たちのテスト自動化プロジェクトで.runsettingsを提供しても、苦労しました。また、TestContextパラメータをいくつかのクラスに渡すという問題に直面しました。 だから、私の解決策はそれほど正確ではないかもしれないが、それが働いた:

[TestClass] 
public class Operations : TestBase 
{ 
    public void CreateRelationship() 
    { 
     // Add test logic here   
    } 
} 

テスト基底クラス:順番に

[TestClass] 
public abstract class TestBase 
{ 
    [AssemblyInitialize] 
    public static void ContextInitialize(TestContext context) 
    { 
     DriverUtils.Initialize(context); 
    } 
} 

そしてDriverUtils:

public static class DriverUtils 
{ 
    private static IWebDriver driver; 
    private static TestContext testContext; 

    private static string testEnvironment = string.Empty; 

    public static void Initialize(TestContext context) 
    { 
     testContext = context; 
     testEnvironment = Convert.ToString(testContext.Properties["TestEnvironmentUrl"]); 
    } 
} 

.runsettingsファイルが正確に見えます例のように、私は "TestEnvironmentUrl"パラメータを空白のままにしました。次に、.runsettingsファイルをTFS成果物に追加し、後で 'Run Functional UI Tests'セクションのファイルへのTFSリリース構成の追加パスを追加しました。それから、実際のサーバーURLで 'TestEnvironmentUrl'を上書きすることができました。 まだ[AssemblyInitialize]の実装が見つかりませんでしたが、子テストクラスのテストコンテキストを親TestBaseに渡すことができると思います。