0
votes

Puis-je manipuler l'ordre des matchers Mockito?

Un certain contexte

Lors de la configuration des simulacres ( 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> xxx pré>

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>

Ce que j'essaie d'atteindre h1>

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>

when(callOnMock(eq(2)).thenReturn("result");


0 commentaires

3 Réponses :


0
votes

Essayez ceci: xxx

et appelez-le comme: xxx


1 commentaires

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.



1
votes

Utiliser un fournisseur : xxx


1 commentaires

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.



0
votes

Je pense qu'il y a quelques façons d'atteindre le comportement souhaité.

1. Manipuler l'ordre des matchers sur la pile h1>

Ce n'est pas la voie à suivre! strong> p> BlockQuote>

Le Matcherstack code> semble être interne à Mockito.
Ils ont une méthode pour PullLocalizedMatchers 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");


0 commentaires