Mockito vérifier la méthode a été appelée avec set, qui contient une valeur spécifique
Je veux être sûr que se moquaient est appelé avec un ensemble spécifique des chaînes de caractères en paramètre.
Par exemple, j'ai le code suivant:
public class SomeLogic {
@Autowired
private SpecificService specificService;
public void action() {
Set<String> args = fillArgsMethod();
specificService.handleArgs(args);
}
}
Et mon actuel essaie de le tester est la suivante
@Mock
private SpecificService specificService
@InjectMocks
private SomeLogic someLogic;
@Test
public void testAction() {
someLogic.action();
verify(specificService).handleArgs(anySet());
}
Mais je veux être sûr, que handleArgs() va recevoir l'ensemble exact des chaînes, que j'attends. Comment puis-je modifier la vérification pour vérifier que handleArgs est appelé à définir le "premier","deuxième"?
Grâce
OriginalL'auteur me1111 | 2014-04-16
Vous devez vous connecter pour publier un commentaire.
Préparer votre
Set
paramètres avant d'appeler la méthode d'essaiVous êtes les bienvenus. J'utilise Hamcrest parce qu'il a un meilleur rapprochement et une meilleure information lorsqu'un test échoue.
OriginalL'auteur isah
Isah a donné une réponse valable, mais je veux attirer votre attention sur un plus caractéristique générale de Mockito qui est ArgumentCaptor
Dans le cas où vous vous feriez quelque chose le long des lignes suivantes:
OriginalL'auteur geoand
isah la solution est parfait pour vous si vous souhaitez vous assurer que l'ensemble contient exactement les deux articles que vous spécifiez; Mockito compare à l'aide de
.equals
par défaut, etSet.égal à
est définie comme la référence à l'égalité des éléments dans n'importe quel ordre.Pour une plus flexibles "contient" test qui correspond à votre question titre, qui permet de définir les membres de l'au-delà de vos valeurs, vous pouvez également utiliser le Hamcrest
contient
matcher:Au moins, c'est comment il devrait look. Malheureusement,
argThat
détermine son type de retour de la Correspondance, qui détermine son type de retour de la arguments, donc Java suppose que votre premier argument n'est pas unSet<String>
mais unIterable<capture#1-of ? extends String>
. Vous aurez besoin de cast explicite et supprimer les avertissements de l'obtenir pour fonctionner:OriginalL'auteur Jeff Bowman