2009-09-29 13 views
2

Comment exécuter un test de plug-in Eclipse JUnit dans un thread non-ui lors de l'exécution des tests à partir de la ligne de commande? Dans la boîte de dialogue de configuration du lancement, je peux décocher la case à cocher "Exécuter dans le thread d'interface utilisateur", mais comment faire cela lors de l'exécution de tests de plug-in sur la ligne de commande?Exécution de tests de plug-in Eclipse dans un thread non-ui

EDIT: Il semble que org.eclipse.pde.junit.runtime.nonuithreadtestapplication est ce que le lancement de la PDE utilise lors de l'exécution des tests dans un thread non-UI, mais quand j'essayer d'utiliser cela, je reçois "paramètre '-port' not found":

 
Loading logger configuration: c:\work\dev\tooticki\core\ide\eclipse\plugins\com.iar.ide.tests\logging.properties 
23:42:51,349 [main   ] INFO ew     - Starting application: class com.iar.ew.Application 
Exception in thread "WorkbenchTestable" java.lang.IllegalArgumentException: Error: parameter '-port' not specified 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:303) 
    at org.eclipse.pde.internal.junit.runtime.RemotePluginTestRunner.init(RemotePluginTestRunner.java:83) 
    at org.eclipse.pde.internal.junit.runtime.RemotePluginTestRunner.main(RemotePluginTestRunner.java:61) 
    at org.eclipse.pde.internal.junit.runtime.NonUIThreadTestApplication.runTests(NonUIThreadTestApplication.java:23) 
    at org.eclipse.ui.internal.testing.WorkbenchTestable$1.run(WorkbenchTestable.java:71) 
    at java.lang.Thread.run(Thread.java:619) 

Répondre

1

Lorsque vous dites exécuter les tests à partir de la ligne de commande, voulez-vous dire en invoquant les objectifs anti-PDE?

La tâche de fourmi pour exécuter les tests de PDE a deux cibles, core-tests et ui-tests pour tester headlessly et avec l'interface utilisateur respectivement. Il y a un article sur le Eclipse Test Framework avec plus de détails, mais essentiellement vous pouvez juste choisir la cible appropriée et tant que votre code sous test n'a pas besoin d'accéder à l'interface utilisateur vos tests seront exécutés sous la cible de test de base. Vous pouvez également trouver ce coin Eclipse article on PDE and Ant utile

Si vous invoquez les tests par un autre moyen. Vous pouvez toujours jeter un oeil à l'source des tâches de fourmi pour comprendre comment PDE ils configurer l'environnement

+0

Non, je n'utilise pas les objectifs anti-PDE. J'appelle directement mon lanceur de produit. – JesperE

+0

Dans ce cas, vous pouvez copier le traitement utilisé par les tâches ant, voir le lien source dans ma réponse –

1

Créer une nouvelle classe d'application qui va de org.eclipse.pde.internal.junit.runtime.UITestApplication:

public class NonUIThreadTestApplication extends UITestApplication { 
    public void runTests() { 
    fTestableObject.testingStarting(); 
    try { 
     EclipseTestRunner.run(Platform.getCommandLineArgs()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    fTestableObject.testingFinished(); 
    } 
} 

Je pense que vous devez copier EclipseTestRunner depuis le plug-in org.eclipse.test dans votre plug-in en raison de restrictions de dépendance.

Ajouter une nouvelle application dans votre plugin.xml:

<extension 
     id="nonuithreadtestapplication" 
     point="org.eclipse.core.runtime.applications"> 
    <application visible="false"> 
    <run class="com.my.test.NonUIThreadTestApplication" /> 
    </application> 
</extension> 

Ajouter une nouvelle section dans org.eclipse.test/library.xml:

<target name="nonui-thread-ui-test" description="Eclipse application used to launch UI plugin tests in a non-UI thread." depends="init"> 
    <antcall target="${launchTarget}"> 
    <param name="application" value="com.my.test.nonuithreadtestapplication" /> 
    </antcall> 
</target> 

Après cela, vous pouvez exécutez vos tests en utilisant la cible nonui-thread-ui-test au lieu de ui-test ou core-test.

Bonne chance!

0

Apparemment, org.eclipse.pde.junit.runtime.nonuithreadtestapplication a besoin d'un écouteur de résultats de test dédié. Comment faire est décrit dans this article.