如何在另一个类中初始化TestContext属性?

时间:2016-04-19 11:38:42

标签: c# selenium mstest

我是Selenium的新手,我正在尝试通过CSV文件执行数据驱动的测试。为此,我在包含测试属性的类中定义DataSource属性。我正在使用MStest框架。

[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是我用来存储实际webdriver的类。 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读取值时,我们正在使用“TestContext”来访问DataRow而不是“instance”。每当我看到它时,这个问题都会让我烦恼。

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

请不要介意问题的长度。我详细解释了我的问题。任何帮助都可以得到赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:1)

TestContext由MSTEST框架自动设置,但仅在[TestClass]归属的类中以及从此类执行测试时。

在这种情况下,只需将TestContext作为ExcelTest类的TestUsingCSV方法中的参数传递。