11
votes

Exécution de Nunit Tests sur une mode multithread

est-il possible d'exécuter des tests de nunit de manière multithread? Y a-t-il un coureur qui peut fournir ceci?

Avant que quelqu'un saute sur le concept "Test de l'unité", permettez-moi d'expliquer: ce sont des tests pas unitaires Nous utilisons également Nunit pour des tests fonctionnels / d'intégration et certains de ces tests sont incroyablement lents, et certains de ces tests sont incroyablement lents, obtenu beaucoup d'état d'attente. Par conséquent, la multithreading peut les aider massivement.

Je sais en dernier recours, je peux rouler mon propre multi-threading dans les tests, mais cela introduirez une surcharge non emembergée.


2 commentaires

+1 pour expliquer le scénario :)


En tant que Stackoverflower expérimenté, je sais ce qui va se passer lorsque vous demandez quelque chose comme ça: D


7 Réponses :


0
votes

Vous voudrez peut-être consulter le cadre de test multithreadé sur trop, qui a une classe ThreadManager que vous pourriez toujours prolonger légèrement pour ajouter le concept d'essais «échec».

http://weblogs.asp.net/rosherove/archive/2007/06/22/Multi-Threaded-unit-tests-with-oSherove-threadtester.aspx

Si vous utilisez uniquement des asserts, vous pouvez compter les exceptions.

bonne chance

PS: Pourquoi ne pas exécuter plusieurs coureurs Nant / Nunit hors du processus?


1 commentaires

Oui, j'ai vu cela, mais ce code n'est pas différent de celui-ci, d'utiliser des fils dans votre propre piscine de thread (ou je manque quelque chose). Ce n'est pas quelque chose d'intelligent tel que [Threadtest] - maintenant que ce serait cool :) en réalité, plusieurs instances de Nunit ne sont pas une mauvaise idée, juste un peu désordonnée et nécessite un travail manuel très malade.



2
votes

essayez Pnunit


0 commentaires

0
votes

Je travaille sur un port .NET du MULTHREADEDTC JAVA Bibliothèque . Mon port s'appelle Ticking Test et le code source est publié sur GitHub.

Tickingtest n'était pas initialement destiné à faire ce que vous essayez, mais cela pourrait fonctionner. Il vous permet d'écrire une classe de test avec plusieurs méthodes marquées d'un attribut testthead. Chaque thread peut attendre qu'un certain nombre de tiques arrivent ou affirment ce qu'il pense que le nombre actuel de tiques devrait être. Lorsque tous les threads actuels sont bloqués, un fil de coordonnateur avance le nombre de tiques et réveille les threads qui attendent le prochain compte de coche. Si vous êtes intéressé, consultez le Vue d'ensemble Multhreadedtc pour exemples. Multithreadedtc a été écrit par certaines des mêmes personnes qui ont écrit Findbugs .

J'ai utilisé mon port avec succès sur un petit projet. La principale caractéristique manquante est que je n'ai aucun moyen de suivre les threads nouvellement créés lors du test.


0 commentaires

1
votes

Voici une référence à Pnuint http://www.codicesoftware.com/opdownloads2/oppnunit .aspx . Nous l'utilisons dans le cadre de l'environnement pour charger une application Web avec une fonctionnalité Ajax étendue


0 commentaires

2
votes

Mais bien sûr, nous devons aussi avoir un soutien de TeamCity aussi ;-)

Prétendument Nunit3 aura un support multithreading.


0 commentaires

0
votes

Je ne peux pas croire que Mstest n'est pas répertorié. Visual Studio soutient plusieurs tests simultanés pour les âges.


1 commentaires

Mstest l'outil de test de l'unité? Je pense que vous pouvez faire référence aux outils de test de la charge de performance qui ne sont disponibles que dans Visual Studio Ultimate Edition. Nunit a testé des tests simultanés pendant un moment, mais l'auteur cherche à faire des tests d'intégration et a besoin de plus qu'un simple coureur de test.



0
votes

Nous configurons un script MSbuild récursif pour exécuter simultanément les DLL de test de l'unité, qui ressemble à ceci:

  <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>


0 commentaires