Automating unit tests (junit) pour le développement du Plugin Eclipse

je développe des plugins Eclipse, et j'ai besoin de pouvoir automatiser la construction et l'exécution de la suite de test pour chaque plugin. (En Utilisant Junit)

Les tests fonctionnent dans Eclipse, et je peux casser les plugins dans le plugin actuel et un plugin de fragment pour les tests unitaires comme décrit ici,ici et dans quelques endroits ici.

cependant, chacune des approches ci-dessus aboutit au même problème: le Java ant commande tâche / ligne de commande qui lance la construction ou devrait déclencher le test, ne génère aucun effet secondaire observable, et renvoie la valeur "13". J'ai essayé tout ce que je peux trouver, et j'ai appris pas mal de choses sur le démarrage D'Eclipse (par exemple: depuis v3.3 vous ne pouvez plus utiliser le démarrage.jar -- il n'existe pas, mais vous devez utiliser org.Eclipse.équinoxe.lanceur). Malheureusement, si cette information est apparemment nécessaire, elle est loin d'être suffisante.

je suis en train de travailler avec Eclipse 3.4, Junit 4.3.1 (the org.junit4 bundle, mais je préférerais utiliser JUnit 4.4. Voir ici.)

alors, ma question est: comment automatisez-vous exactement la construction et les tests des plugins Eclipse?

Edit: pour clarifier, je voulez pour utiliser quelque chose comme ant + cruise control, mais je ne peux même pas obtenir les tests de l'unité à exécuter tout à L'extérieur de L'éclipse. Je dis "quelque chose comme" parce qu'il y a d'autres technologies qui accomplissent la même chose, et je ne suis pas si difficile de rejeter une solution qui fonctionne juste parce qu'elle utilise par exemple, Maven ou Buckminster, si ces technologies rendent cela considérablement plus facile.

Edit2: La Java de Résultat 13' mentionné ci-dessus semble être causé par l'impossibilité de trouver le coretestrunner. À partir du journal:

java.lang.RuntimeException: Application "org.eclipse.test.coretestapplication" could not be found in the registry. The applications available are: org.eclipse.equinox.app.error, com.rcpquickstart.helloworld.application.
    at org.eclipse.equinox.internal.app.EclipseAppContainer.startDefaultApp(EclipseAppContainer.java:242)
    at org.eclipse.equinox.internal.app.MainApplicationLauncher.run(MainApplicationLauncher.java:29)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:382)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1212)
    at org.eclipse.core.launcher.Main.main(Main.java:30)

!ENTRY org.eclipse.osgi 2 0 2008-11-04 21:02:10.514
!MESSAGE The following is a complete list of bundles which are not resolved, see the prior log entry for the root cause if it exists:
!SUBENTRY 1 org.eclipse.osgi 2 0 2008-11-04 21:02:10.515
!MESSAGE Bundle update@plugins/org.eclipse.test_3.2.0/ [34] was not resolved.
!SUBENTRY 2 org.eclipse.test 2 0 2008-11-04 21:02:10.516
!MESSAGE Missing required bundle org.apache.ant_0.0.0.
!SUBENTRY 2 org.eclipse.test 2 0 2008-11-04 21:02:10.516
!MESSAGE Missing required bundle org.eclipse.ui.ide.application_0.0.0.
!SUBENTRY 1 org.eclipse.osgi 2 0 2008-11-04 21:02:10.518
!MESSAGE Bundle update@plugins/org.eclipse.ant.optional.junit_3.2.100.jar [60] was not resolved.
!SUBENTRY 2 org.eclipse.ant.optional.junit 2 0 2008-11-04 21:02:10.519
!MESSAGE Missing host org.apache.ant_[1.6.5,2.0.0).
!SUBENTRY 2 org.eclipse.ant.optional.junit 2 0 2008-11-04 21:02:10.519
!MESSAGE Missing required bundle org.eclipse.core.runtime.compatibility_0.0.0.
16
demandé sur Community 2008-11-01 04:20:41

7 réponses

je viens de faire travailler JUnit testing dans le cadre de la construction sans tête pour notre application RCP.

j'ai trouvé cet article - automatiser les tests de L'unité PDE Eclipse en utilisant Ant incroyablement utile. Il fournit le code et l'approche pour vous lancer. Cependant, j'ai découvert un certain nombre de choses:

A propos du code de l'article

  • il n'y avait qu'un seul paquet sous tests (nous avons séparé notre processus de construction du code, en utilisant Buckminster)
  • il n'y avait qu'une classe de test.
  • ces deux éléments ont été codés en dur dans le script de construction

a Propos de l'Éclipse de la PDE

  • uitestapplication nécessite un autre testApplication. En utilisant coretestapplication ne fonctionne pas.
  • car ces deux applications sont en paquets qui ont des dépendances sur SWT. C'est un tueur à gages dans la plupart des circonstances, mais pas si votre machine de construction est une fenêtre. J'aimerais pour voir ceux-ci divisés en faisceaux non-UI.

j'ai trouvé que le code fourni était un bon point de départ, mais que certaines des hypothèses ci-dessus étaient implicites dans leur mise en oeuvre.

ayant découvert ces hypothèses, faire le travail était relativement simple.

Notre nouveau et brillant de configuration

  • buckminster construit les paquets.
  • target copie les paquets de la plate-forme cible, le org.Eclipse.pde.d'exécution et org.Eclipse.jdt.junit dans un "testeur-eclipse-installer". Cela devrait prendre soin de votre Java Result 13 problème.
  • trouver les fragments d'essai en regardant l'espace de travail
  • trouver l'hôte du fragment en regardant le manifeste
  • trouvez les classes de test en regardant le projet dans l'espace de travail.
  • enregistrer un PDETestListener modifié pour gérer plusieurs classes de test
  • invoquer le testeur-eclipse-install avec le plusieurs classes de test.

j'ai lu Construire et d'Automatisation de Test pour les plugins et fonctionnalités mais nous n'utilisons pas PDE-Build directement.

12
répondu jamesh 2008-11-13 20:00:28

pour quiconque cherche encore un moyen d'exécuter les tests du plugin Eclipse en dehors D'Eclipse, la commande suivante fonctionne pour moi:

java -Xms40m -Xmx1024m -XX:MaxPermSize=512m -Dorg.eclipse.swt.browser.DefaultType=mozilla -Declipse.pde.launch=true -classpath C:\eclipse\eclipse-standard-luna-M2-win32-x86_64\eclipse\plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar org.eclipse.equinox.launcher.Main -port 22 -testLoaderClass org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader -loaderpluginname org.eclipse.jdt.junit4.runtime -classNames testpackage.testClass -application org.eclipse.pde.junit.runtime.uitestapplication -data C:\temp\log.temp -dev bin -consoleLog -testpluginname PluginName

-classpath devrait être réglé sur Eclipse launcher jar. Vous pouvez obtenir la version exacte de votre éclipse à partir de eclipse.ini fichier.

-className junit plugin de test de nom de fichier

-data est défini à un fichier temp.

-testpluginname est le nom du plugin que vous souhaitez tester.

3
répondu Gunjan Aggarwal 2016-11-23 11:59:41

en regardant votre exception, il est dit que l'application coretesest manquante. La cible ant peut être trouvée chez plugins/org.Eclipse.test_3.1.0/bibliothèque.xml: 10

il s'agit en fait d'un problème de dépendance. Eclipse doit avoir tous les plugins pour pouvoir construire.

Pour le configurer correctement, il y a 2 fichiers à regarder.

  1. Le fichier produit
  2. le caractéristique.xml

assurez-vous que le produit fichier contient tous les plugins dont vous avez besoin.

après cela, ajouter l'org.Eclipse.le rcp et org.Eclipse.caractéristiques du test

... les plugins sont au-dessus de ...

<features>
      <feature id="mock_feature" version="1.0.0"/>
      <feature id="mock_feature_test" version="1.0.0"/>
      <feature id="org.eclipse.rcp" version="3.2.0.v20060609m-SVDNgVrNoh-MeGG"/>
      <feature id="org.eclipse.test" version="3.2.0.v20060220------0842282442"/>
 </features>

Vous avez besoin de org.Eclipse.test pour exécuter les tests, et org.Eclipse.rcp lancera eclipse afin d'exécuter les tests.

N'oubliez pas de définir useFeatures à 'true'

<product name="mock" id="com.example.mock" application="com.example.mock.application" useFeatures="true">

fonctionnalité.xml

en supposant que vous avez une fonctionnalité pour tester, vous devez ajouter 2 plugins supplémentaires.

... d'autres plugins ci-dessus ...

<plugin
         id="org.apache.ant"
         download-size="0"
         install-size="0"
         version="0.0.0"/>

   <plugin
         id="org.eclipse.core.runtime.compatibility"
         download-size="0"
         install-size="0"
         version="0.0.0"
         unpack="false"/>

les tests ont besoin d'org.Apache.ant pour faire les tests et l'org.Eclipse.core.Runtime.compatibilité au lancement.

un Autre gotcha

assurez-vous que dans votre eclipse cible(la copie d'eclipse que vous utilisez pour construire), il n'y a que 1 copie de chaque plugin. Par exemple s'il y a 2 versions de com.IBM.plugins icu dans le dossier plugin, eclipse utiliserait le plus récent. Comme le plugin de construction pde est configuré pour utiliser une version spécifique, eclipse se plaindrait de ne pas pouvoir trouver le plugin en question, même s'il est présent.

pensées

L'ensemble du processus de construction de l'éclipse pourrait être beaucoup mieux. En fait, j'ai obtenu le processus principalement par essai et erreur. La documentation est périmée et clairsemée. Les messages d'erreur ne vous aide pas. Ça ne fait que te sentir impuissant et frustré. Espérons que ce post aide un collègue programmeur à gagner du temps!

2
répondu liangzan 2009-06-08 07:41:27

nous utilisons les scripts de construction PDE (voir cette question), et nous exportons des fichiers de compilation pour nos plugins de test d'unité. Ces scripts de construction ant sont alors invoqués à partir des scripts de construction PDE (customTargets).xml) utilisant la tâche ant" ant". Malheureusement, cela ne fonctionne qu'avec JUnit3. Il est supposé y avoir un adaptateur JUnit4 pour JUnit3 pour que vous puissiez exécuter les tests JUnit4 d'un coureur de test JUnit3.

nous allons probablement passer à quelque chose comme Maven; les scripts de construction PDE ne sont pas vraiment taillé pour ce qu'on doit en faire.

0
répondu JesperE 2017-05-23 12:32:20

comme alternative à Ant, j'ai eu une bonne expérience dans l'utilisation du tout nouveau Maven+Tycho avec Hudson. Tycho fournit un support complet pour le développement Osgi et Eclipse dans Maven. Il est actuellement en développement, mais la plupart des fonctionnalités dont j'ai besoin ont fonctionné. Il n'a besoin que de très peu de configuration de votre côté, car il peut Parser MANIFEST.Fichiers MF.

si vous avez de l'expérience avec Maven, il n'est pas très difficile de commencer à travailler avec elle. Hudson est un peu plus problématique à cause du manque de soutien Maven 3. (la version de développement de Maven 3 est utilisée par Tycho)

liens pour démarrer:

0
répondu AMilassin 2009-09-03 14:20:44

voici un outil que je peux recommander si quelqu'un est interressé par TDD : Infinitest

brève description extraite du site Infinitest:

Qu'est-ce que Infinitest?

Infinitest est un coureur d'essai continu conçu pour faciliter le Test Driven Développement. Infinitest vous aide apprenez le DTM en fournissant des commentaires au fur et à mesure que vous travailler, et vous aide à maîtriser TDD par réduire votre cycle de rétroaction minutes à de simples deuxième.

chaque fois que vous changez de classe, Infinitest exécute vos tests pour vous. Il est intelligent sur les tests à exécuter, et ne dirige que ceux dont tu as besoin. Si des erreurs se produisent, elle le signale de façon claire et concise. Cela vous donne commentaires instantanés sur la sémantique l'exactitude de votre code, tout comme les IDE modernes vous donnent une rétroaction instantanée à propos des erreurs de syntaxe.

-1
répondu Fred 2008-11-04 07:51:30

Utiliser Ant et CruiseControl - vous appeler les tests unitaires dans le Ant script ainsi que le reste de votre construction logique et peut fonctionner avec chaque version d'itération - puis CruiseControl peut automatiser vos appels de compilation et exécuter ces tests à chaque fois.

-1
répondu silverbugg 2008-11-04 19:28:25