2016-12-06 2 views
1

Pour optimiser fin, je besoin de personnaliser la logique TestExecutionListeners invocateurQuelle est la meilleure façon de personnaliser plusieurs méthodes TestExecutionListeners invoquées pour TestSuite?

Dans mon cas, j'ai un ApplicationContext et deux types de tests:

  1. celles qui utilisent WebDriver (appelons-le ObservableTest)
  2. celles qui utiliser RestTemplate et JdbcTemplate (appelons-le ApiTest)

Chaque utilisations de type son propre TestExecutionListener:

  1. ObservableTest - ObservableTestListener
  2. ApiTest-ApiTestListener

Les deux ObservableTestListener et ApiTestListener étendre TestListenerprepareTestInstance() est défini

ObservableTestListener met en œuvre des méthodes beforeTestClass() et afterTestClass() ainsi que ApiTestListener-t

J'ai besoin de combiner les types de test ci-dessus dans un JUnit TestSuite de la prochaine façon:

  1. Pour chaque test prepareTestInstance() est invoqué
  2. Dès la première ObservableTest est sur le point d'être instancié, beforeTestClass() de ObservableTestListener est exécuté
  3. La même chose avec ApiTest
  4. afterTestClass() de ObservableTestListener est invoquée lors de la dernière ObservableTest est terminée dans la suite actuelle
  5. La même chose avec ApiTest

Les choses se sont encore plus compliquées que chaque test peut être exécuté dans une suite et dans différents ApplicationContexts (en raison de différents usages profils)

Je serais très reconnaissant de tout soupçon et la direction de creuser pour mettre en œuvre cette logique correctement

J'ai deux idées à ce jour:

  1. La mise en œuvre personnalisée Runner (je ne suis pas convaincu qu'il est encore possible)
  2. prévenir TestContextManager en quelque sorte cette méthode particulière (beforeTestClass() ou afterTestClass()) devrait ou ne devrait pas être invoquée. J'ai le sentiment que @BootstrapWith coutume SpringClassRule devrait me aider dans cette

Merci!

+0

Pourquoi est-il pas possible d'utiliser '@ TestExecutionListeners' sur les 2 différents types de test pour enregistrer les auditeurs appropriés? –

+0

@ M.Deinum c'est exactement ce que je fais, mais quand je mets ces tests en suite, TestExecutionListeners invoque ses méthodes avec chaque test de cette suite. J'essaie d'éviter que – Anton

+0

SuiteExecutionListener de Spring peut fonctionner. http://stackoverflow.com/questions/37985717/is-there-anything-like-spring-testexecutionlistener-for-testsuite –

Répondre

1

L'API TestExecutionListener dans Spring TestContext Framework n'a aucun rappel de cycle de vie au niveau de la suite. Par conséquent, il n'est pas possible d'indiquer à Spring d'invoquer des méthodes sur les TELs avant ou après une suite. Par conséquent, toute solution que vous proposez pour répondre à vos besoins devra être entièrement personnalisée.

Je ne prévois pas comment un SpringClassRule personnalisé serait utile: vous aurez toujours besoin d'un mécanisme fiable pour déterminer quand une suite de tests commence et se termine. C'est en fait le plus grand défi puisque le support de la suite dans JUnit 4 est via un Runner spécifique. Donc, si vous exécutez tous vos tests via un JUnit 4 Suite, vous pourriez potentiellement intégrer vos propres rappels de cycle de vie dans une sous-classe personnalisée de Suite.

Cordialement,

Sam (auteur du cadre TestContext Spring)