nUnit 不是先执行 OneTimeSetup 而是先执行 OneTimeTearDown

nUnit isnt executing OneTimeSetup first but executing OneTimeTearDown

我最近从 MSTest 切换到 nUnit 以 运行 我的 selenium 测试。通过 MSTest,我 运行 进行了测试 作为程序集初始化。我读到我可以做类似的事情并删除 并将所有必要的元素添加到 运行 我使用 NUnit 的测试中,但顺序是 根据我阅读的内容执行不符合我的预期,或者我可能无法执行此操作。

Nunit 版本 = 3.12.0

NUnit3TestAdapter = 3.17.0

下面是我的代码示例 带有我的测试用例的 cs 文件 和另一个具有我的安装夹具的 cs 文件都在同一个命名空间中。

我遇到的问题是当我 运行 我的测试用例时,属性 OneTimeTearDown 首先被执行 先于其他而不是 OneTimeSetup。

      using System;
  using NUnit.Framework;
namespace Automation_Test
{

  [TestFixture]
  public class Custom_Tests
  {
    [Test]
    public void Add()
    { /* ... */ }
  }
}

用于包含我的程序集的文件已初始化

using System;
  using NUnit.Framework;
namespace Automation_Test
{

   [SetUpFixture]
  public class AssemblyInitializer
  {
    [OneTimeSetUp]
    public static void LoginSystem()
    { /* ... */ }

    [OneTimeTearDown] <---- This method is getting trigger first when i run the test instead of onetimesetup
    public static void AssemblyCleanup()
    { /* ... */ }

  
  }
}

要将 SetUpFixture 用作程序集初始值设定项,它必须在全局命名空间中,即在您指定的任何命名空间之外。

随着代码的设置,fixture 会在命名空间 而不是assembly-wide 中初始化测试。这可能没问题,前提是您的所有测试都在同一个命名空间中。如果您根据此设置在多个命名空间中进行测试,那将是一个问题。

即便如此,您的设置没有 运行 而您的拆解却有,这似乎很奇怪。因此,尝试将 SetUpFixture 移动到全局名称空间并报告发生的情况。如果你找到更多信息,我会更新这个。

我遇到的问题是将播放设置放在 OneTimeSetup 方法中

 Playback.PlaybackSettings.DelayBetweenActions = 750;
 Playback.PlaybackSettings.ThinkTimeMultiplier = 2;

我没有显示问题。这引起了沉默 我没有看到发生的异常会绕过

   [OneTimeSetUp]
    public static void LoginSystem()
    { /* ... */ }

然后直接进入 OnetimeTeardown 方法

我更新了我的程序并卸载了我的项目并删除了引用 和编码相关的元素 ui 并正确添加了三个程序集 参考文献

  1. Microsoft.VisualStudio.TestTools.UITest.Playback
  2. Microsoft.VisualStudio.TestTools.UITest.WindowsStoreUtility
  3. Microsoft.VisualStudio.TestTools.UITesting

执行此操作后,我的程序正常运行。