2017-06-20 3 views
0

Ich verwende Microsofts WinAppDriver in Verbindung mit Visual Studio 2015 Komponententests, um das Testen von Windows-Anwendungen zu automatisieren. Diese Tests werden von der Befehlszeile aus mit VSTest.exe ausgeführt, da ich eine .runsettings-Datei als Parameter übergeben kann, um bestimmte Testeinstellungen anzugeben, die ich möglicherweise in Zukunft ändern muss. Ich möchte die .runsettings-Datei direkt von meinen Testmethoden referenzieren können, ohne am Anfang meines Codes in der Setup-Methode eine Menge globaler Variablen erstellen zu müssen. Obwohl ich mehrere Klassen verwende, bin ich mehr oder weniger es wie so tun:Wie wird auf .runsettings-Dateiwerte in C# -Einheitstestmethoden verwiesen?

protected static string basicFile; 

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

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

Wo context.Properties [] Referenzen den Schlüssel in meiner .runsettings Datei.

Der Grund kann ich nicht einfach

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

ist, weil Prüfverfahren keine Parameter akzeptieren. Also, gibt es eine Möglichkeit, ich kann direkt auf die .runsettings-Datei innerhalb der Testmethode ohne Verwendung von context.Properties verweisen?

Antwort

0

Ich bin gerade von Java zum C# -Projekt gewechselt und die Bereitstellung von .runsettings in unserem Testautomatisierungsprojekt hat mir auch eine harte Zeit bereitet. Ich war auch mit dem Problem konfrontiert, TestContext Parameter durch mehrere Klassen zu übergeben. So kann meine Lösung nicht so genau sein, aber es funktioniert:

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

Testbasisklasse:

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

Und DriverUtils wiederum:

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"]); 
    } 
} 

Die .runsettings Datei sieht genau Wie in den Beispielen, aber ich habe den Parameter "TestEnvironmentUrl" leer gelassen. Dann fügte ich .runsettings-Datei zu TFS-Artefakten und später in TFS-Release-Konfiguration hinzugefügt Pfad zur Datei im Abschnitt "Functional UI Tests ausführen". Dann konnte ich 'TestEnvironmentUrl' mit der echten Server-URL überschreiben. Ich habe die Implementierung von [AssemblyInitialize] noch nicht gefunden, aber ich nehme an, dass es möglich ist, den Testkontext von untergeordneten Testklassen an die übergeordnete TestBase zu übergeben.

Verwandte Themen