子类中参数化TestFixture的NUnit配置和继承

时间:2013-06-27 08:32:13

标签: c# selenium nunit automated-tests

我正在建立一个Selenium套件。我试图找出如何最好地为所有浏览器和所有客户运行TestFixture。这是我试图做的,由于“没有合适的构造函数”而无法正常工作

这是我的基类,它提供了一个浏览器和方法来创建子类的webdriver。

[TestFixture(Browser.Chrome)]
[TestFixture(Browser.Firefox)]
[TestFixture(Browser.IE)]
[TestFixture(Browser.Safari)]
abstract class WebDriverTest
{
    protected IWebDriver driver;
    protected Browser browser;

    public WebDriverTest(Browser browser)
    {
        this.browser = browser;
    }

    protected IWebDriver CreateWebDriver()
    {
        CreateWebDriver(browser);
    }
}

为所有客户提供TestFixture。对于属于某些客户端的功能,我会有其他类似的测试类。

[TestFixture(Client.Client1)]
[TestFixture(Client.Client2)]
abstract class AllClientsTest : WebDriverTest
{
    protected Client client;

    public AllClientsTest(Browser browser, Client client) : base(browser)
    {
        this.client = client;
    }

    protected Navigator GetNavigator()
    {
        return NewNavigator(client)
    }
}

最后,我将使用为所有客户运行的webdriver编写测试的类。

class InheritanceTest : AllClientsTest
{
    public InheritanceTest(Browser browser, Client client) : base(browser, client)
    {
    }

    [Test]
    public void Print()
    {
        Console.WriteLine(browser + ":" + client);
    }
}

这样的事情是否可能?我正在尝试保持配置独立于TestRunner而不是重复自己在测试用例中创建大量参数(可以初始化数据驱动)。我还尝试在[TestFixture(typeof(Browser), typeof(Client))]类中添加AllClientsTest等属性。

如果有一种数据驱动方式来设置[TestFixture]属性,我可以在基类中加载两组配置并在那里加载配置并消除超类的需要,这些基本上只是用来方便地运行一堆测试。

1 个答案:

答案 0 :(得分:0)

你看过NUnit的SetUpFixture功能了吗?我做了一些与你正在尝试的东西模糊相似的东西。

我写了a blogpost on using SetUpFixture for warming up sites,这是一项不同的任务。这可能会有所帮助。