2016-04-19 8 views
0

私はSeleniumを初めて使用しており、CSVファイルを使用してデータ駆動型テストを実行しようとしています。このために、私はテスト属性を含むクラスのDataSource属性を定義しています。私はMStestフレームワークを使用しています。別のクラスのTestContextプロパティを初期化するにはどうしたらいいですか?

[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は、実際のウェブドライバを保存するために使用しているクラスです。 PageElementsは、すべてのWeb要素を宣言したクラスです。

私はテストが不器用にならないように、別のクラスで 'DDtest_usingCSV'メソッドにある変数を定義しようとしています。しかし、別のクラスで別のtestcontextを定義するときはいつでも、NullReferenceExceptionが発生しています。私はクラス間でプロパティを渡そうとしました。しかし、私はそれをすることができませんでした(私はまだ学んでいます)。以下は

私はプロパティを初期化できませんでしたとして、私は、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(); 
    } 
} 

を初期化しようとしているクラスは、私がテストクラスファイルにその方法をパラメータ化しています。

以下に述べるようにTestContextプロパティを宣言しているのに対し、なぜインスタンスの代わりにプロパティ名として "TestContext"を使用していますか?

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

Excelから値を読み込む時に、我々は代わりに「インスタンス」のDataRowをアクセスするための「TestContext」を取っています。この質問は私がそれを見るたびに私を悩ませている。

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

質問の長さにはご注意ください。私は自分の問題について詳細な説明をしました。どんな助けもありがとう。前もって感謝します。

答えて

0

TestContextは、MSTESTフレームワークによって自動的に設定されますが、[TestClass]に属するクラスと、このクラスからのテストを実行するときにのみ自動的に設定されます。

あなたの場合、ExcelTestクラスのTestUsingCSVメソッドのパラメータとしてTestContextを渡すだけです。

+0

ありがとうございました。@Sergey L.問題を解決しました。しかし、プロパティを静的にして、 "ExcelTest"クラスのプロパティにアクセスする方法はありますか?なぜ、 "TestContext"と同じプロパティ名を使用していますか? –

+0

MSTESTは、テストクラス([TestClass])でその名前でプロパティを検索し、見つかった場合はコンテキストに割り当てられます。クラスに存在しない場合は割り当てられません。静的にすることはできません - MSTESTの仕組みです。 –

+0

ありがとうございました@Sergey L. –

関連する問題