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 并正确添加了三个程序集
参考文献
- Microsoft.VisualStudio.TestTools.UITest.Playback
- Microsoft.VisualStudio.TestTools.UITest.WindowsStoreUtility
- Microsoft.VisualStudio.TestTools.UITesting
执行此操作后,我的程序正常运行。
我最近从 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 并正确添加了三个程序集 参考文献
- Microsoft.VisualStudio.TestTools.UITest.Playback
- Microsoft.VisualStudio.TestTools.UITest.WindowsStoreUtility
- Microsoft.VisualStudio.TestTools.UITesting
执行此操作后,我的程序正常运行。