【问题标题】:Run all tests in same thread NUnit在同一线程 NUnit 中运行所有测试
【发布时间】:2020-09-29 10:19:01
【问题描述】:

我有一些测试可以对数据库进行一些写操作。我知道这不是真正的单元测试,但让我们把它放在一边。

为了使每个测试都能在干净的工作区上运行,我回滚了迄今为止所做的所有事务。但是,由于无法建立数据库锁,我随机出现并发错误。

这是我的代码:

Test1.dll

[TestFixture]
class MyTest1
{
    [OneTimeSetup]
    public void SetupFixture()
    {
        myworkspace.StartEditing(); // this will establish a lock on the underlying database
    }
    [OneTimeTearDow]
    public void TearDownFixture()
    {
        myWorkspace.Rollback();
    }
}

相同的代码也存在于另一个测试程序集中,我们将其命名为Test2.dll。现在,当我使用 nunit3-console Test1.dll Test2.dll 使用 nunit-console-runner 时,出现以下错误:

System.Runtime.InteropServices.COMException:无法锁定表“GDB_DatabaseLocks”;它当前由主机“MyHost”上的用户“ADMIN”(这是我)使用 在 ESRI.ArcGIS.Geodatabase.IWorkspaceEdit.StartEditing(Boolean withUndoRedo)

myWorkspace 是一个与 MS-Access-Database 相关的 COM 对象(Arcobjects-interface IWorkspace)。我认为这是因为 nunit 创建了多个同时输入上述代码的线程。所以我将NonParalizable-attribute 添加到两个程序集中,但没有成功。我还尝试将Apartment(ApartmentState.STA) 添加到我的程序集中,以便在单个线程中执行所有内容,这导致控制台永远无法完成。

让我抓狂的是,使用 ReSahrpers 测试运行器运行我的测试可以完美运行。但是我不知道 ReSharper 是如何启动 nunit 的。似乎 ReSharper 不使用 nunit-console,而是使用 nunit-API。

还有其他方法可以强制我的所有测试在单个线程中运行吗?我使用 nunit3.10 和 ArcGIS 10.8。

【问题讨论】:

  • 从这里知道你的答案,我不确定它是否对你有帮助。 As shown here 您需要将 ApartmentState.STA 添加到程序集、类 方法级别。你试过吗?你的问题对我来说并不完全清楚。
  • @nilsK 哇,这很棒,因为有数百个测试。不过我会试试看的。

标签: c# nunit-3.0 arcobjects single-threaded


【解决方案1】:

默认情况下,NUnit 控制台将并行运行多个测试程序集。添加--agents=1 以强制两个程序集在单个代理下按顺序运行。


只是为了澄清您也尝试过的其他一些事情......

[NonParallelizable] 用于防止单个程序集中的不同测试并行化。默认情况下,程序集内的测试不会并行运行,因此当您没有在更高级别专门添加 [Parallelizable] 时添加此属性将无效。

[Apartments(Apartment.STA)] 可以作为程序集级属性添加,并且不必每次测试都添加,如 cmets 中所述。在此处查看文档:https://docs.nunit.org/articles/nunit/writing-tests/attributes/apartment.html

【讨论】:

  • 这很酷,因为我不需要任何属性,因此可以让我的测试代码保持原样。最后一个问题:如果我想并行运行所有 reading 测试而只按顺序运行 writing 测试怎么办?不是应该也可以使用单个代理吗?因此,我只需将 [Parallelizable] 添加到仅对我的数据库执行 read 操作的测试中就可以了(或者使程序集可并行化而编写测试不可以)?
  • 这是一种选择,是的!最有效的方法实际上取决于您的读/写测试是如何分离的。可能值得快速阅读此处的文档以查看此处的不同选项。 =) --> docs.nunit.org/articles/nunit/writing-tests/attributes/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
  • 2010-12-04
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多