Automatisation des tests unitaires (junit) pour le développement du plugin Eclipse
Je suis le développement de plugins Eclipse, et j'ai besoin d'être en mesure d'automatiser la construction et de l'exécution de la suite de test pour chaque plugin. (En Utilisant Junit)
Test travaillez au sein d'Eclipse, et je peux briser les plugins dans le plugin et un fragment de plugin pour les tests unitaires, comme décrit iciici et dans quelques endroits ici.
Cependant, chacune de ces approches résultats ci-dessus, dans le même numéro: Le java tâche ant/ligne de commande, commande que les problèmes de construction ou de déclencher le test, génère n'observe pas d'effets secondaires, et renvoie la valeur "13". J'ai essayé tout ce que je peux trouver, et je ai appris un peu juste sur la façon de l'Éclipse commence (par exemple: depuis la v3.3 vous ne pouvez plus utiliser startup.jar -- il n'existe pas, mais vous devriez utiliser org.eclipse.équinoxe.lanceur). Malheureusement, alors que c'est apparemment informations nécessaires, il est loin d'être suffisant.
Je travaille avec Eclipse 3.4, Junit 4.3.1 (org.junit4 paquet, mais je préfère utiliser JUnit 4.4. Voir ici.)
Donc, ma question est: Comment automatiser la construction et des tests de plugins Eclipse?
Edit: Pour clarifier, je voulez à utiliser quelque chose comme ant + cruise control, mais je ne peux même pas obtenir l'unité tests à exécuter à tous les en dehors d'Eclipse. 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 exigeant que de jeter une solution qui fonctionne, tout simplement parce que c'est à l'aide de le dire, Maven ou Buckminster, si ces technologies rendent cet sensiblement 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.
source d'informationauteur rcreswick
Vous devez vous connecter pour publier un commentaire.
Je viens de recevoir JUnit test de travail dans le cadre de la headless construire pour notre application RCP.
J'ai trouvé cet article - L'automatisation de l'Éclipse de la PDE Tests Unitaires à l'aide de Ant incroyablement utile. Il fournit le code et l'approche pour obtenir vous avez commencé. Cependant, un certain nombre de choses que j'ai découvert:
À propos de l'article du code
À propos de l'Éclipse de la PDE
uitestapplication
nécessite un autretestApplication
. À l'aide decoretestapplication
ne le fait pas.J'ai trouvé que le code fourni est un bon point de départ, mais il avait un certain nombre de ci-dessus hypothèses implicites dans leur mise en œuvre.
Après avoir découvert ces hypothèses, faire le travail a été relativement simple.
Notre nouveau et brillant d'installation
Java Result 13
problème.PDETestListener
modifié pour gérer plusieurs classes de testJ'ai aussi lu Construire et l'Automatisation des tests pour les plugins et fonctionnalités mais nous ne sommes pas à l'aide de la PDE-Construire directement.
Pour tout toujours à la recherche d'un moyen d'exécuter des plug-in Eclipse, tests à l'extérieur de l'Éclipse, la commande suivante fonctionne pour moi:
-classpath
doit être réglé à Eclipse lanceur jar. Vous pouvez obtenir la version exacte de votre Eclipse deeclipse.ini
fichier.-className
est junit plugin de test de nom de fichier-data
est défini pour un fichier temp.-testpluginname
est le nom du plugin que vous souhaitez tester.À la recherche, à l'exception, il est dit que la coretestapplication est manquant. La cible ant peut être trouvé à l'plugins/org.eclipse.test_3.1.0/bibliothèque.xml:10
C'est en fait un problème de dépendance. Eclipse besoin d'avoir tous les plugins dans le but de construire.
Pour le configurer correctement, il y a 2 fichiers à regarder.
Produit
Assurez-vous que le produit fichier contient tous les plugins dont vous avez besoin.
Ensuite, ajouter le org.eclipse.le rcp et org.eclipse.fonctions de test
...
les plugins sont au-dessus de
...
Vous avez besoin de org.eclipse.test pour exécuter les tests, et org.eclipse.rcp pour lancer eclipse pour exécuter les tests.
N'oubliez pas de mettre useFeatures à 'true'
feature.xml
En supposant que vous avez une fonction pour le test, vous devez ajouter 2 plugins supplémentaires.
...
d'autres plugins ci-dessus
...
Les tests doivent org.apache.ant pour exécuter les tests et org.eclipse.de base.moment de l'exécution.compatibilité pour lancer.
Un autre gotcha
Assurer que votre cible eclipse(la copie de l'éclipse que vous utilisez pour construire contre), il y a seulement 1 exemplaire de chaque plugin. Par exemple, si il existe 2 versions de com.ibm.icu plugins dans le dossier du plugin eclipse serait d'utiliser la plus récente. Comme le pde construire plugin est configuré pour utiliser une version spécifique, eclipse puisse se plaindre qu'il ne trouve pas le plugin en particulier, même quand il est là.
Quelques réflexions
L'ensemble du processus de construction de l'éclipse pourrait être beaucoup mieux. En fait j'ai eu les processus, principalement par des essais et des erreurs. La documentation est obsolète et clairsemée. Les messages d'erreur ne vous aide pas. Il ne vous laisse un sentiment d'impuissance et de frustration. Espérons que ce post aidera un collègue programmeur gagner du temps!
Nous sommes à l'aide de la PDE scripts de compilation (voir cette question), et nous l'exportation ant fichiers pour notre unité de test des plugins. Ces scripts ant sont alors invoquées de la PDE scripts de compilation (customTargets.xml) à l'aide de la "fourmi" ant-tâche. Malheureusement, cela ne fonctionne qu'avec JUnit3. Il est censé être un JUnit4-adaptateur pour JUnit3 de sorte que vous pouvez exécuter JUnit4 tests à partir d'un JUnit3 test-coureur.
Nous allons probablement passer à quelque chose comme Maven; le PDE construire les scripts ne sont pas vraiment taillé pour ce que nous devons faire avec eux.
Comme une alternative à la Fourmi, j'ai eu une bonne expérience dans l'utilisation de la marque de nouvelles Maven+Tycho avec Hudson. Tycho fournit un support complet pour Osgi et de développement d'Eclipse dans Maven. Il est actuellement en développement, mais la plupart des fonctionnalités que j'ai besoin de travaillé. Il n'a besoin que de très peu de configuration à partir de votre côté, parce qu'il peut analyser le MANIFESTE.MF fichiers.
Si vous avez une certaine expérience avec Maven, il n'est pas très difficile de commencer à travailler avec elle. Hudson est un peu plus problématique en raison de l'absence de Maven 3. (la version de développement de Maven 3 est utilisé par Tycho)
Liens pour commencer:
Voici un Outil qui, je peux le recommander si quelqu'un est interressé par TDD :
Infinitest
Courte description extraite de la Infinitest site:
Utilisation 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 - alors CruiseControl pouvez automatiser votre version des appels et de l'exécution de ces tests à chaque fois.