2016-04-19 6 views
0

Ich bin Selenium neu und ich versuche, einen datengetriebenen Test über CSV-Datei durchzuführen. Dazu definiere ich das DataSource-Attribut in einer Klasse, die Testattribute enthält. Ich benutze MStest Rahmen.Wie kann ich die TestContext-Eigenschaft in einer anderen Klasse initialisieren?

[TestClass] 
public class UnitTest1:BaseDriver 
{ 

    ExcelTest sd; 

    private TestContext instance; 

    public TestContext TestContext 
    { 
     set { instance = value; } 
     get { return instance; } 
    } 

    public UnitTest1() 
    { 

     sd = new ExcelTest(_driver);    
    } 

    [TestInitialize] 
    public void Testinitialize() 
    { 

    } 

    [TestMethod] 
    [DeploymentItem("TestData.csv")] 
    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", @"C:\Users\nidumukv\Documents\Visual Studio 2012\Projects\BMICalculator\BMICalculator\DataFiles\TestData.csv", "TestData#csv", DataAccessMethod.Sequential)] 
    public void DDtest_usingCSV() 
    { 
     string feet = TestContext.DataRow["feet"].ToString(); 
     string inches = TestContext.DataRow["inches"].ToString(); 
     string weight = TestContext.DataRow["weight in pounds"].ToString(); 
     string BMI = TestContext.DataRow["BMI"].ToString(); 


     sd.TestUsingCSV(feet,inches,weight,BMI); 
    } 

    [TestCleanup] 
    public void cleanup() 
    { _driver.Quit(); } 


} 

BaseDriver ist eine Klasse I die tatsächlichen WebDriver zu speichern verwenden. PageElements ist eine Klasse, in der ich alle Webelemente deklariert habe.

Ich versuche, die Variablen zu definieren, die in "DDtest_usingCSV" -Methode in einer separaten Klasse sind, so dass der Test nicht ungeschickt wird. Aber wenn ich einen anderen Testkontext in einer anderen Klasse definiere, bekomme ich eine NullReferenceException. Ich habe versucht, die Eigenschaft zwischen Klassen zu übergeben. Aber ich konnte es nicht tun (ich lerne immer noch).

Unten ist die Klasse I die Testcontext

public class ExcelTest:PageElements 
{ 
    public IWebDriver _driver; 

    public ExcelTest(IWebDriver driver):base(driver) 
    { 
     _driver = driver; 

    } 


    public void TestUsingCSV(string _feet,string _inches,string _weight,string _BMI) 
    { 
     feet.SendKeys(_feet); 
     inches.SendKeys(_inches); 
     weight.SendKeys(_weight); 
     compute_btn.Click(); 
    } 
} 

Da ich nicht die Eigenschaft initialisieren konnte, mir Parametrisierung diese Methode in der Testklassendatei zu initialisieren versuchen.

Und warum deklarieren wir die TestContext-Eigenschaft wie unten erwähnt, warum verwenden wir "TestContext" als Eigenschaftsname anstelle von Instanz?

private TestContext instance; 
public TestContext TestContext 
    { 
     set { instance = value; } 
     get { return instance; } 
    } 

Zum Zeitpunkt der Lesewerte aus Excel, wir nehmen „Testcontext“ für DataRow statt „Instanz“ zugreifen. Diese Frage nervt mich jedesmal, wenn ich sie ansehe.

public void DDtest_usingCSV() 
    { 
     string feet = TestContext.DataRow["feet"].ToString(); 
     string inches = TestContext.DataRow["inches"].ToString(); 
     string weight = TestContext.DataRow["weight in pounds"].ToString(); 
     string BMI = TestContext.DataRow["BMI"].ToString(); 


     sd.TestUsingCSV(feet,inches,weight,BMI); 
    } 

Bitte beachten Sie die Länge der Frage. Ich gab eine detaillierte Erklärung zu meinem Problem. Jede Hilfe kann geschätzt werden. Danke im Voraus.

Antwort

0

TestContext wird vom MSTEST-Framework automatisch festgelegt, jedoch nur in der Klasse, die [TestClass] zugeordnet ist und wenn ein Test von dieser Klasse ausgeführt wird.

In diesem Fall übergeben Sie einfach TestContext als Parameter in der TestUsingCSV-Methode der ExcelTest-Klasse.

+0

Vielen Dank @Sergey L. Das hat das Problem gelöst. Aber gibt es eine Möglichkeit, die Eigenschaft STATIC zu erstellen und auf die Eigenschaft in der Klasse "ExcelTest" zuzugreifen? Und warum verwenden wir denselben Eigenschaftennamen wie "TestContext"? –

+0

MSTEST finden Sie die Eigenschaft durch seinen Namen in der Testklasse ([TestClass]) und wenn es gefunden wird, wird es mit dem Kontext zugewiesen. Wenn es in der Klasse nicht vorhanden ist, wird es nicht zugewiesen. Es kann nicht statisch sein - so funktioniert MSTEST. –

+0

Vielen Dank @Sergey L. –