如何从参数化测试夹具中获取值?

时间:2017-12-06 16:30:40

标签: c# nunit

如何将TestFixture参数值作为字符串并传递给Switch语句?我试过但无法解决问题"会员' ClassLibrary1.Browsers.browser1'无法使用实例引用访问;使用类型名称来限定它"。 Init方法应该是静态的,因为我在另一个类中使用它。

代码在这里:

[TestFixture("Chrome")]
public class Browsers
{
    public static IWebDriver webDriver;
    private static string baseURL = "https://www.google.com";
    private static string browser;

    private static string browser1;

    public Browsers(string browser1)
    {
         this.browser1 = browser1;
    }

    public static void Init()
    {
        switch (browser1)
        {
            case "Chrome":
                webDriver = new ChromeDriver();
                break;
            case "IE":
                webDriver = new InternetExplorerDriver();
                break;
            case "Firefox":
                webDriver = new FirefoxDriver();
                break;
        }
        webDriver.Manage().Window.Maximize();
        Goto(baseURL);
    }
    public static string Title
    {
        get { return webDriver.Title; }
    }
    public static IWebDriver getDriver
    {
        get { return webDriver; }
    }
    public static void Goto(string url)
    {            
        webDriver.Navigate().GoToUrl(url);
    }
    public static void Close()
    {
        webDriver.Quit();
    }
}

2 个答案:

答案 0 :(得分:0)

问题是您正在尝试分配类的构造函数内的静态字段。在创建类的实例时会执行构造函数。所以你做不到:

//This doesn't compile:
public class Browsers
{
    //snip
    private static string browser1;

    public Browsers(string browser1)
    {
        this.browser1 = browser1;
    }
    //snip
}

因为没有this.browser1字段 - browser1被声明为static所以在实例上不存在。

我认为你的目标是这样的事情:

[TestFixture("My String")]
public class When_Working_Up_A_Storm
{
    public When_Working_Up_A_Storm(string myString)
    {
        _myString = myString;
    }

    private string _myString;

    [Test]
    public void Magic_Happens()
    {
        Assert.AreEqual("My String", _myString);
    }
}

答案 1 :(得分:0)

正如C#告诉你的那样,你无法从静态方法访问实例成员。在您的情况下出现问题的原因似乎是Browsers实际上不是您的测试夹具,即使您在其上放置了属性。它看起来像一个包含各种实用方法的静态类。是吗?

正确的用法是将TestFixtureAttribute放在TestFixture上,即包含测试的类。在该类的构造函数中,它可以像您一样保存参数的值。然后,它可以直接或使用实用程序类中的方法启动正确的浏览器实例。

您还没有通过在另一个班级中使用静态Init方法来解释您的意思,所以我没有进入,但如果您解释,我会添加到此答案中它