是否可以为所有测试提供[OneTimeSetup]?

问题描述 投票:0回答:2

我正在使用 NUnit 运行一些 Selenium 测试,我遇到了一个小问题,我想看看是否可以得到纠正。发生的情况是 [OneTimeSetUp][OneTimeTearDown] 在每个装置完成后运行。我想要的是在测试开始时运行 [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
}
c# selenium nunit
2个回答
39
投票

OneTimeSetUpAttribute 有两个用途。

首先,它标记测试装置中的一个方法,该方法在该装置中的任何其他测试之前运行一次。这就是您通过从基类继承来使用它的方式。由于继承,OneTimeSetUp 出现在派生灯具的each中,但它仍然运行多次,每个灯具运行一次。

第二种用途是在SetUpFixture中。如果您在特定命名空间中创建 SetUpFixture,则它的 OneTimeSetUp 方法将在该命名空间中的任何其他测试之前运行once。如果您在任何命名空间之外创建 SetUpFixture,则其 OneTimeSetUp 将在程序集中的任何测试之前运行 once

更新:有人建议最后一句应该说“在包含 TestFixture 的任何命名空间之外”。这实际上是不正确的。 SetUpFixture

必须位于任何名称空间之外才能在程序集级别运行。如果有一个顶级命名空间,其中包含all测试代码,那么您也可以在那里放置一个SetUpFixture,效果大致相同。但如果它所在的命名空间中没有测试,那么它永远不会运行。 有关 SetUpFixture 的更多信息,请参阅

docs


0
投票

private static bool FirstInitializationFlag = true; [OneTimeSetUp] public void PrepareTestsStart() { if (FirstInitializationFlag) { FirstInitializationFlag = false; // Do actions before all test classes to run } }

当然最好发表评论为什么要这样做;)

© www.soinside.com 2019 - 2024. All rights reserved.