.net 以多线程方式运行nUnit测试

.net 以多线程方式运行nUnit测试,.net,multithreading,unit-testing,nunit,.net,Multithreading,Unit Testing,Nunit,是否可以以多线程方式运行nunit测试?有没有跑步者可以提供这种服务 在有人跳到“单元测试”概念之前,让我解释一下:这些是而不是单元测试我们也在使用nunit进行功能/集成测试,其中一些测试速度非常慢,有很多等待状态。因此,多线程可以极大地帮助他们 我知道,作为最后的手段,我可以在测试中使用自己的多线程,但这会带来不必要的开销。您可能想看看Overshore多线程测试框架,它有一个ThreadManager类,您可以随时稍微扩展以添加“失败”测试的概念 如果只使用断言,则可以计算异常 祝你好运

是否可以以多线程方式运行nunit测试?有没有跑步者可以提供这种服务

在有人跳到“单元测试”概念之前,让我解释一下:这些是而不是单元测试我们也在使用nunit进行功能/集成测试,其中一些测试速度非常慢,有很多等待状态。因此,多线程可以极大地帮助他们


我知道,作为最后的手段,我可以在测试中使用自己的多线程,但这会带来不必要的开销。

您可能想看看Overshore多线程测试框架,它有一个ThreadManager类,您可以随时稍微扩展以添加“失败”测试的概念

如果只使用断言,则可以计算异常

祝你好运


ps:为什么不在进程外运行几个nant/nunit runner?

试试看

我正在开发的.NET端口。我的端口被调用,源代码发布在GitHub上

TickingTest最初并不打算做您正在尝试的事情,但它可能会起作用。它允许您编写一个测试类,其中包含几个用TestThread属性标记的方法。每个线程都可以等待某个记号计数到达,或者断言它认为当前记号计数应该是什么。当所有当前线程都被阻止时,协调器线程会提前进行勾号计数,并唤醒等待下一个勾号计数的所有线程。如果您感兴趣,请查看示例。MultithreadedTC是由编写它的一些人编写的


我已经在一个小项目中成功地使用了我的端口。缺少的主要功能是,我无法在测试期间跟踪新创建的线程。

这里是对PNUint的引用。我们使用它作为环境的一部分来加载测试具有广泛ajax功能的web应用程序

,但当然我们也必须有TeamCity对此的支持;-)


据称NUnit3将提供多线程支持。

我不敢相信MSTest没有列出。VisualStudio多年来一直支持多个并发测试

我们设置了一个递归MSBuild脚本来并发运行单元测试DLL,如下所示:

  <Target Name="UnitTestDll">
    <Message Text="Testing $(NUnitFile)" />
    <ItemGroup>
      <ThisDll Include="$(NUnitFile)"/>
    </ItemGroup>
    <NUnit ToolPath="$(NUnitFolder)" Assemblies="@(ThisDll)" OutputXmlFile="$(TestResultsDir)\%(ThisDll.FileName)-test-results.xml" ExcludeCategory="Integration,IntegrationTest,IntegrationsTest,IntegrationTests,IntegrationsTests,Integration Test,Integration Tests,Integrations Tests,Approval Tests" ContinueOnError="true" />
  </Target>

  <Target Name="UnitTest" DependsOnTargets="Clean;CompileAndPackage">
      <Message Text="Run all tests in Solution $(SolutionFileName)" />
      <CreateItem Include="$(SolutionFolder)**\bin\$(configuration)\**\*.Tests.dll" Exclude="$(SolutionFolder)\NuGet**;$(SolutionFolder)**\obj\**\*.Tests.dll;$(SolutionFolder)**\pnunit.tests.dll">
        <Output TaskParameter="Include" ItemName="NUnitFiles" />
      </CreateItem>
    <ItemGroup>
      <TempProjects Include="$(MSBuildProjectFile)">
        <Properties>NUnitFile=%(NUnitFiles.Identity)</Properties>
      </TempProjects>
    </ItemGroup>
    <RemoveDir Directories="$(TestResultsDir)" Condition = "Exists('$(TestResultsDir)')"/>
    <MakeDir Directories="$(TestResultsDir)"/>

    <MSBuild Projects="@(TempProjects)" BuildInParallel="true" Targets="UnitTestDll" />
  </Target>

NUnitFile=%(NUnitFiles.Identity)
显然,您仍然需要编译目标(或者在我们的例子中是CompileAndPackage)来首先实际构建测试DLL


这也会弄乱大多数报告工具的NUnit结果,但解决了这个问题后,我们已经编写了一个工具来帮助解决这个问题:

+1用于解释场景:)作为一名经验丰富的stackoverflower,我知道当你问这样的问题时会发生什么:Dyeah,我看到了,但这段代码与只在自己的线程池中运行线程没有任何区别(或者我遗漏了什么)。它不是像[ThreadTest]这样聪明的东西——现在这很酷:)实际上运行多个nUnit实例不是一个坏主意,只是有点混乱,需要相当多的人工。MSTest单元测试工具?我想您可能指的是性能负载测试工具,这些工具仅在VisualStudioUltimate edition中可用。NUnit测试并发测试已经有一段时间了,但作者希望进行集成测试,并且需要的不仅仅是一个简单的测试运行程序。