以多线程方式运行nUnit测试

时间:2009-10-08 08:09:45

标签: .net multithreading unit-testing nunit

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

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

我知道作为最后的手段,我可​​以在测试中推出自己的多线程,但这会引入不必要的开销。

7 个答案:

答案 0 :(得分:2)

尝试Pnunit

答案 1 :(得分:2)

但是,当然我们也必须得到TeamCity支持;-)

据称NUnit3将支持多线程。

答案 2 :(得分:1)

这是对PNUint http://www.codicesoftware.com/opdownloads2/oppnunit.aspx的引用。我们将其用作环境的一部分来加载测试具有广泛的ajax功能的Web应用程序

答案 3 :(得分:0)

您可能希望查看Overshore多线程测试框架,该框架具有ThreadManager类,您可以随时稍微扩展以添加“失败”测试的概念。

http://weblogs.asp.net/rosherove/archive/2007/06/22/multi-threaded-unit-tests-with-osherove-threadtester.aspx

如果您只使用断言,则可以计算例外情况。

祝你好运

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

答案 4 :(得分:0)

我正在研究MultithreadedTC Java library的.NET端口。我的端口名为Ticking Test,源代码在GitHub上发布。

TickingTest最初并不打算做你正在尝试的事情,但它可能会奏效。它允许您使用标记有TestThread属性的多个方法编写测试类。每个线程可以等待某个滴答计数到达,或者断言它认为当前滴答计数应该是什么。当所有当前线程被阻塞时,协调器线程会提前滴答计数并唤醒正在等待下一个滴答计数的所有线程。如果您有兴趣,请查看MultithreadedTC overview以获取示例。 MultithreadedTC是由编写FindBugs的一些人撰写的。

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

答案 5 :(得分:0)

我无法相信MSTest没有列出。 Visual Studio一直支持多个并发测试。

答案 6 :(得分:0)

我们设置了一个递归的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>

你显然仍然需要你的编译目标(或者在我们的情况下是CompileAndPackage)来实际构建测试dll。

这也会影响大多数报告工具的NUnit结果,但是我们已经编写了一个工具来解决这个问题:https://github.com/15below/NUnitMerger