0
votes

Testez-vous un contrôleur de démarrage à ressort qui a des dépendances? (Junit)

J'ai cette classe d'essai: xxx pré>

mais dans la classe, je veux tester, j'ai cette ligne: p> xxx pré>

Lorsque j'essaie d'exécuter la classe d'essai - je reçois cette erreur: p>

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ClassToBeTested': Unsatisfied dependency expressed through field 'AnnoyingServiceWhichIsADependency'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type '<package-path>.AnnoyingServiceWhichIsADependency' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}


1 commentaires

Voulez-vous exécuter un test MVC ou un test d'intégration complète?


4 Réponses :


1
votes

La raison pour laquelle un haricot n'est pas créé pour la classe de dépendance est que vous utilisez @webmvctest et non @springboottest : seuls les contrôleurs et les classes d'infrastructure MVC sont numérisées . De Docs :

peut être utilisé lorsqu'un test ne se concentre que sur les composants MVC à ressort.

Comme il s'agit d'un test MVC, vous pouvez vous moquer de la dépendance du service. Exemple: https://reflectoring.io/spring-boot-web-controller-test /


0 commentaires

0
votes

Votre contexte d'application de test tente de charger votre classezteté mais ne peut pas trouver l'une de ses dépendances et se plaindre à ce sujet via cette erreur. Fondamentalement, vous devez avoir un @Bean de ce type dans votre contexte de test. Une option sera de créer une classe TestConfig qui fournit une simulation / espion de cette dépendance via @bean Annotation. Dans votre test, vous devrez charger dans le contexte via l'annotation @contextConfiguration de cette configuration de test que vous venez de créer.

HTTPS : //docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#spring-testing-annotation-ContextConfiguration


0 commentaires

1
votes

@webmvctest ne va que numériser la couche Web, les classes d'infrastructure MVC et de @Controller. C'est ça. Donc, si votre contrôleur a une dépendance à d'autres haricots de, par ex. Formez votre couche de service, elles ne seront pas trouvées à injecter.

Si vous souhaitez un test d'intégration plus complet, utilisez @springboottest au lieu de @webmvctest

Si vous voulez quelque chose de plus proche d'un test unitaire, maquillez votre dépendance.

Notez également que l'injection de champ (@Autowired directement sur le terrain) n'est pas recommandée exactement pour ces raisons. Je vous recommande de changer d'injeciton constructeur (ajoutez un constructeur pour Classetobétesteté et placez l'annotation @Autowired sur elle.) Puis pour un test de l'unité, vous pouvez transmettre une maquette. L'injection de constructeur conduit à une conception plus testable et configurable.


0 commentaires

0
votes

se moquer de cette dépendance. En supposant que ghaningservicewhichisadependency est une interface: xxx

utilise mokito quand et theReturn méthodes pour instruire le simulateur.


0 commentaires