2017-07-31 11 views
0

Nous essayons d'utiliser Feign + Ribbon dans l'un de nos projets. Dans le code de production, nous n'avons pas de problème, mais nous en avons quelques-uns dans les tests jUnit.Feign with Ribbon: reset

Nous essayons de simuler un certain nombre de situations (services défaillants, exécutions normales, exceptions, etc.). Nous devons donc configurer l'intégration du ruban plusieurs fois. Malheureusement, nous avons remarqué que même lorsque nous détruisons le contexte de Spring, une partie de l'état survit probablement quelque part dans des variables statiques (exemple: de nouveaux tests se connectent toujours à l'équilibreur de la suite précédente).

Y a-t-il une manière recommandée, comment purger l'état statique de ces deux outils? (quelque chose comme Hystrix.reset())

Merci d'avance!


Nous avons essayé de réinitialiser JVM après chaque suite - il fonctionne parfaitement, mais ce ne est pas très pratique (il faut le mettre en place dans les deux Gradle et Idea (comme tunner test Idée ne respecte pas hors de la boîte)). Nous avons également essayé de renommer le service entre les tests - cela fonctionne sur disons 99% (il échoue parfois pour une raison quelconque ...)

Répondre

0

Vous devriez soumettre un bug à Ribbon s'il y a un état statique quelque part . Déterminez quel code minimal provoque le problème, si vous n'êtes pas capable de le faire, alors ils ne feront rien. Dans votre base de code, vous devriez faire une recherche pour toute utilisation de statique qui n'est pas aussi finale et les refactoriser s'il en existe.

En outre, vous pouvez trouver utile de faire des distinctions entre les différents types de tests. Il ne semble pas que vous fassiez un test unitaire. Même si vous ne faites que simuler ces services et simuler des échecs, ce type de test est en réalité un test d'intégration, car vous testez si Ribbon est correctement configuré avec vos propres composants, ce qui est vraiment un test d'intégration. Ce serait un test unitaire si vous testiez seulement que votre composant est en train de configurer le Ruban correctement, pas sûr si j'ai du sens là-bas c'est une distinction subtile mais cela a de grandes implications dans votre test. Sur une autre note, ne pas rejeter ce que vous avez maintenant comme nécessairement une mauvaise idée. Il peut être très utile d'avoir des tests d'intégration de poids lourds vérifiant le comportement de Feign s'il s'agit d'une fonction critique, c'est une excellente idée dans ce cas. Mais c'est un test d'intégration de poids lourds et devrait être traité comme tel. Vous pouvez même utiliser un conteneur magique pour réaliser ce type de test, avec des services qui échouent dans vos différents scénarios de défaillance. Cela se produirait dans CI et, en général, les développeurs ne dirigeraient pas ces types avec chaque commit à moins qu'ils ne travaillent directement avec une fonctionnalité concernant l'intégration.