C# 是否可以为所有测试设置[一次性设置]?

C# 是否可以为所有测试设置[一次性设置]?,c#,selenium,nunit,C#,Selenium,Nunit,我正在使用NUnit运行一些Selenium测试,我有一个小问题,我想看看我是否可以得到纠正。发生的情况是,[OneTimeSetUp]和[OneTimeEartDown]在每个夹具完成后运行。我想要的是在测试开始时运行一次[OneTimeSetUp],在所有装置完成后运行拆卸 TestBaseClass.cs public class TestBaseClass { [OneTimeSetUp] public void Init() { // Log

我正在使用NUnit运行一些Selenium测试,我有一个小问题,我想看看我是否可以得到纠正。发生的情况是,[OneTimeSetUp]和[OneTimeEartDown]在每个夹具完成后运行。我想要的是在测试开始时运行一次[OneTimeSetUp],在所有装置完成后运行拆卸

TestBaseClass.cs

public class TestBaseClass
{

    [OneTimeSetUp]
    public void Init()
    {
         // Login
    }

    [OneTimeTearDown]
    public void TearDown()
    {
        Driver.Close();
    }
}
[TestFixture]
public class NavigationTests : TestBaseClass
{
    // Tests
}
[TestFixture]
public class MainPageTests : TestBaseClass
{
    // Tests
}
导航测试

public class TestBaseClass
{

    [OneTimeSetUp]
    public void Init()
    {
         // Login
    }

    [OneTimeTearDown]
    public void TearDown()
    {
        Driver.Close();
    }
}
[TestFixture]
public class NavigationTests : TestBaseClass
{
    // Tests
}
[TestFixture]
public class MainPageTests : TestBaseClass
{
    // Tests
}
MainPageTests

public class TestBaseClass
{

    [OneTimeSetUp]
    public void Init()
    {
         // Login
    }

    [OneTimeTearDown]
    public void TearDown()
    {
        Driver.Close();
    }
}
[TestFixture]
public class NavigationTests : TestBaseClass
{
    // Tests
}
[TestFixture]
public class MainPageTests : TestBaseClass
{
    // Tests
}

OneTimeSetUpAttribute有两个用途

在第一种情况下,它在测试夹具中标记一个方法,该方法在该夹具中的任何其他测试之前运行一次。这就是您使用它的方式,通过从基类继承。由于继承,OneTimeSetUp会出现在衍生装置的每个装置中,但仍会运行多次,每个装置运行一次

第二种用法是在设置夹具中使用。如果在特定名称空间中创建SetUpFixture,它的OneTimeSetUp方法将在该名称空间中的任何其他测试之前运行一次。如果在任何命名空间之外创建SetUpFixture,则其OneTimeSetUp将在程序集中的任何测试之前运行一次

更新:有人建议最后一句应该说“在任何包含TestFixture的命名空间之外”。这实际上是不正确的。SetUpFixture必须位于任何命名空间之外,才能在程序集级别运行。如果有一个顶级名称空间,其中包含所有测试代码,那么您也可以在其中放置一个SetUpFixture,效果大致相同。但是,如果它位于一个名称空间中,并且该名称空间下有no测试,那么它将永远不会运行

有关SetUpFixture的更多信息,请参见