2017-06-20 3 views
3

Nous avons une application Eclipse RCP plutôt plus grande et nous ne savons pas comment tester correctement ses plugins.Comment tester JUnit efficacement Plugins Eclipse RCP

  • Pour chaque module, un fragment de test contient des tests unitaires.
  • Pour les tests plus petits, qui ne nécessitent pas l'exécution de la plate-forme RCP, nous appelons simplement le coureur de test JUnit "standard".

enter image description here

  • Pour les tests, qui nécessitent la plate-forme RCP, il y a la possibilité de le tester à l'aide du lanceur de test plugin JUnit.

enter image description here

  • Pour les tests de plug-ins JUnit, il est possible de définir quels plug-ins sont chargés lorsque la plate-forme RCP démarre.

enter image description here enter image description here

  • Problème: Exécution JUnit Tests de Plugin prend beaucoup de temps (secondes au lieu de millicseconds pour simple test JUnit) et des ressources, depuis la plate-forme RCP et tous les plugins doivent commencer.

  • Question: Comment puis-je réduire efficacement les plugins qui sont exécutés pour le test? Quelles options ai-je pour minimiser mes dépendances avec la plate-forme RCP (telles que le service de préférences et les points d'extension)? Y a-t-il peut-être des bibliothèques Mocking ou au moins quelques bonnes pratiques pour se moquer des services de plate-forme RCP?

En ce moment, je ne peux pas imaginer faire un peu TDD décent avec le lanceur de test plugin JUnit, il faut trop de temps pour exécuter ces tests.

Tous les conseils et l'expérience sur ce sujet sont les bienvenus!

Répondre

4

Je peux sentir votre douleur: avoir des tests plug-in nul! Et je n'ai pas non plus trouvé une solution pleinement satisfaisante. Bien que vous puissiez gagner quelques (milli -?) Secondes en réduisant les plug-ins requis au strict minimum, je l'ai trouvé peu pratique car les changements dans votre graphe de dépendance nécessitent souvent d'ajuster la configuration de lancement. Et ceci s'aggrave si vous avez des fragments dépendant de la plateforme (c'est-à-dire SWT) dans vos configurations de lancement (partagées). Je retombe généralement à l'tous les espaces de travail et activé les plug-ins cibles option et n'ont pas vu une différence notable dans la vitesse de démarrage.

Je ne suis pas au courant d'une bibliothèque fictive pour la plateforme RCP. Sauf pour les cas très simples, je m'abstiendrais de se moquer des parties de la plate-forme car vous pourriez facilement obtenir le mauvais comportement.Voir aussi ce post: https://stackoverflow.com/a/31938571/2986905

Ma pratique est de garder autant que possible les dépendances de plate-forme hors de mon code d'application pour pouvoir écrire des tests JUnit simples. Les abstractions personnalisées sur les API de plate-forme peuvent aider ici pour les cas d'utilisation récurrents. De plus, un nombre étonnamment élevé d'API de plates-formes peuvent être utilisées sans que l'environnement de travail ne fonctionne, comme toutes les API SWT et JFace, préférences, ... Ainsi, écrire de petites classes simples avec des dépendances minimes aide à rester à l'écart des tests de plug-in. Par exemple, séparer le contenu d'une vue de l'IViewPart (ou de son équivalent e4) permet d'écrire des tests sans avoir besoin d'une vue et, à son tour, d'une instance de workbench en cours d'exécution (pardon si j'affirme l'évidence).

+1

Bonne réponse. Rappelle cette recommandation de base dans l'un des livres de Robert Martin: * dans la mesure du possible, écrivez des POJO afin que vous puissiez correctement tester leur logique *. – GhostCat

+1

Merci pour votre contribution! Je suis d'accord, j'essaie de garder la plateforme à l'écart de tout ce qui est possible. Malheureusement, je ne suis pas le seul à écrire du code;) L'encapsulation du modèle d'application, de la plateforme et des préférences/UI n'est pas vraiment là pour de nombreuses classes. Les refactorisations pour optimiser la testabilité sont dangereuses, puisque le code n'est pas correctement testé;) et parlant d'expérience, elles ont parfois des effets secondaires étranges et cassent des choses. – kerner1000