2009-10-08 52 views
11

是否有可能以多線程的方式運行nunit測試?有沒有可以提供這個的跑步者?以多線程的方式運行nUnit測試

的「單元測試」的概念有人跳之前,讓我解釋一下:這是沒有單元測試我們使用NUnit的功能/集成測試以及和一些測試是慢得令人難以置信,得到了很多等待州。因此多線程可以大量幫助他們。

我知道作爲最後的手段,我可​​以在測試中推出自己的多線程,但是這會引入不必要的開銷。

+1

+1解釋爲有經驗的stackoverflower場景:) –

+0

我知道什麼是當你問這樣的事情時會發生:D –

回答

0

您可能想看看Overshore多線程測試框架,它具有一個ThreadManager類,您可以稍微擴展以添加「失敗」測試的概念。

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

如果你只使用斷言,可以算例外。

好運

PS:爲什麼不跑幾楠/ NUnit的亞軍出來的過程?

+0

是的我已經看到了,但是這個代碼和在你自己的線程池中運行線程沒有什麼不同(或者我錯過了什麼)。這並不是什麼聰明的東西,比如[ThreadTest] - 現在會很酷:) 實際上運行nUnit的多個實例並不是一個壞主意,只是有點麻煩,需要相當多的手工勞動。 –

0

我工作的MultithreadedTC Java library的.NET端口上。我的端口叫做Ticking Test,源代碼在GitHub上發佈。

TickingTest最初並不打算做你想做的事,但它可能工作。它可以讓你用幾個標有TestThread屬性的方法編寫一個測試類。每個線程可以等待一定的滴答計數到達,或斷言它認爲當前的滴答計數應該是什麼。當所有當前線程被阻塞時,協調器線程提前計數並喚醒正在等待下一個滴答計數的任何線程。如果您有興趣,請查看MultithreadedTC overview舉例。 MultithreadedTC是由編寫FindBugs的一些人編寫的。

我已經在一個小項目上成功地使用了我的端口。主要缺失的功能是我無法在測試過程中跟蹤新創建的線程。

2

但是ofcourse我們必須有這個TeamCity的支持太;-)

據稱NUnit3將支持多線程。

0

我不敢相信MSTest沒有列出。 Visual Studio已經支持多個年齡的併發測試。

+0

MSTest單元測試工具?我想你可能會提到性能負載測試工具,這些工具只能在Visual Studio Ultimate版本中使用。 NUnit已經測試了一段時間的併發測試,但作者正在尋找集成測試,並且需要的不僅僅是一個簡單的測試運行器。 –

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