Lors de la configuration des simulacres ( Je parle du deuxième style. P> à cause de la façon dont Mockito fonctionne, l'ordre dans lequel Les comparuts sont appelés est important. En interne, Mockito enregistre les correspondants sur une pile, les exécutera dans l'ordre lorsque cela est nécessaire. P> Je veux écrire quelques utilitaires de test à utiliser avec Mockito. J'aimerais que ces méthodes utilitaires déléguent des appels à la simulation, interjetant des correspondants par défaut qui seraient autrement un code de test de la chaude. P> par exemple: p> quand code>) ou de vérifier les appels (
vérifier code>) sur les simulacres, Mockito vous demande de fournir toutes les valeurs de béton une méthode moquée besoins ou fournissez un correspondeur pour tous. Il n'est pas possible de mélanger ces styles. P>
Ce que j'essaie d'atteindre h1>
when(callOnMock(eq(2)).thenReturn("result");
3 Réponses :
Essayez ceci: et appelez-le comme: p>
Cela ne fonctionne que pour le simple exemple que j'ai donné. Ce n'est pas toujours possible ni souhaitable de fournir la valeur au lieu du matcheur.
Utiliser un fournisseur code>:
Cette solution fonctionne réellement et permet également de passer des adjecteurs non triviaux également. Cela nécessite des efforts pour l'utiliser car la construction et la fourniture de correspondants complexes est facile de se tromper.
Je pense qu'il y a quelques façons d'atteindre le comportement souhaité.
Ce n'est pas la voie à suivre! strong> p> BlockQuote> Le
Matcherstack code> semble être interne à Mockito.
Ils ont une méthode pourPullLocalizedMatchers Code> à partir de la pile et un
reportermatcher code> pour appuyer sur un
argumentmatcher code> sur la pile. Celles-ci pourraient être accessibles via p>
xxx pré> donc en théorie, vous pouvez choisir ce chemin, mais la solution serait fragile car vous jouez avec les internes de Mockito. Ils pourraient changer sans préavis dans les versions ultérieures de Mockito. P>
Heureusement, il y a quelques alternatives. P>
2. Contrôler l'ordre dans lequel les correspondants sont enregistrés en premier lieu h1>
à l'aide du fournisseur Java 8 code> Interface fonctionnelle (Ceci correspond à Cette réponse donnée par @toyonos) p>
Les correspondants sont enregistrés automatiquement par Mockito lorsque vous appelez les méthodes les créant (
eq code> code> > ArgThat code>,
tout code>,
isnotnull code>, ...). Mais vous pouvez retarder ces méthodes en passant un fournisseur
code> pour chacun de ces correspondants. La méthode de la commodité contrôle ensuite l'ordre dans lequel il exécute ces fournisseurs. P>
when(callOnMock(eq(2))).thenReturn("result");