est-il possible d'exécuter des tests de nunit de manière multithread? Y a-t-il un coureur qui peut fournir ceci? P>
Avant que quelqu'un saute sur le concept "Test de l'unité", permettez-moi d'expliquer: ce sont des tests Je sais en dernier recours, je peux rouler mon propre multi-threading dans les tests, mais cela introduirez une surcharge non emembergée. P>
7 Réponses :
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». P>
Si vous utilisez uniquement des asserts, vous pouvez compter les exceptions. P>
bonne chance p>
PS: Pourquoi ne pas exécuter plusieurs coureurs Nant / Nunit hors du processus? P>
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.
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. p>
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 . P>
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. P>
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 P>
Mais bien sûr, nous devons aussi avoir un soutien de TeamCity aussi ;-) p>
Prétendument Nunit3 aura un support multithreading. P>
Je ne peux pas croire que Mstest n'est pas répertorié. Visual Studio soutient plusieurs tests simultanés pour les âges. p>
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.
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>
+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