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

本文关键字:初始化 TestContext 属性 另一个 | 更新日期: 2024-10-19 01:29:00

我是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是我用来存储实际网络驱动程序的类。PageElements是一个类,我在其中声明了所有的web元素。

我试图在一个单独的类中定义"DDtest_usingCSV"方法中的变量,这样测试就不会变得笨拙。但是,每当我在另一个类中定义另一个测试上下文时,我都会得到一个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);
    }

请不要介意问题太长。我对我的问题作了详细的解释。任何帮助都将不胜感激。提前谢谢。

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

TestContext由MSTEST框架自动设置,但仅在具有[TestClass]属性的类中以及当它从该类执行测试时设置。

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