私は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);
}
質問の長さにはご注意ください。私は自分の問題について詳細な説明をしました。どんな助けもありがとう。前もって感謝します。
ありがとうございました。@Sergey L.問題を解決しました。しかし、プロパティを静的にして、 "ExcelTest"クラスのプロパティにアクセスする方法はありますか?なぜ、 "TestContext"と同じプロパティ名を使用していますか? –
MSTESTは、テストクラス([TestClass])でその名前でプロパティを検索し、見つかった場合はコンテキストに割り当てられます。クラスに存在しない場合は割り当てられません。静的にすることはできません - MSTESTの仕組みです。 –
ありがとうございました@Sergey L. –