J'ai cette classe d'essai: mais dans la classe, je veux tester, j'ai cette ligne: p> 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)}
4 Réponses :
La raison pour laquelle un haricot n'est pas créé pour la classe de dépendance est que vous utilisez peut être utilisé lorsqu'un test ne se concentre que sur les composants MVC à ressort. P>
blockQuote>
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 / p> @webmvctest code> et non
@springboottest code>: seuls les contrôleurs et les classes d'infrastructure MVC sont numérisées . De Docs : P>
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. P>
@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. p>
Si vous souhaitez un test d'intégration plus complet, utilisez @springboottest au lieu de @webmvctest P>
Si vous voulez quelque chose de plus proche d'un test unitaire, maquillez votre dépendance. P>
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. p>
se moquer de cette dépendance. En supposant que utilise mokito ghaningservicewhichisadependency code> est une interface:
quand code> et
theReturn code> méthodes pour instruire le simulateur. p> p>
Voulez-vous exécuter un test MVC ou un test d'intégration complète?