Se moquer d'un enum à l'aide de Mockito en Java
Comment puis-je simuler un enum pour des fins de test à l'aide de Mockito? Compte tenu de cet échantillon pour l'enum:
public enum TestEnum {
YES,
NO
}
et celui-ci pour la méthode à l'aide de l'enum:
public static boolean WorkTheEnum(TestEnum theEnum) {
switch (theEnum) {
case YES:
return true;
case NO:
return false;
default:
//throws an exception here
}
}
comment se moquer de l'enum pour atteindre la branche par défaut de l'interrupteur de boucle? Cette réponse dit Mockito ne peut pas se moquer des enums, mais la réponse a également été donnée plus d'un an. Je peux simuler un enum pendant ce temps ou j'ai laisser la direction de séjour non testés? D'autres se moquant de cadres ne peuvent pas être utilisés.
Il y a hacky façons de faire cela: De Piratage Enums et la Modification définitive "statique" Champs
Enum sont comme statique de la classe, par conséquent, vous ne pouvez pas moke avec mokito.Dans votre exemple, la valeur par défaut est inaccessible, donc on ne peut pas le tester.
Pourquoi ne voulez tester une inaccessible chemin?
De quoi êtes-vous expecintg,
par exemple
Enum sont comme statique de la classe, par conséquent, vous ne pouvez pas moke avec mokito.Dans votre exemple, la valeur par défaut est inaccessible, donc on ne peut pas le tester.
Pourquoi ne voulez tester une inaccessible chemin?
De quoi êtes-vous expecintg,
MAYBE
- ??par exemple
OriginalL'auteur Arthur Eirich | 2016-07-06
Vous devez vous connecter pour publier un commentaire.
Il y a deux réponses à cela:
a) on pourrait se tourner vers certains PowerMock-comme se moquer cadre. Mes deux cent(entences): ne pas le faire. PowerMock ouvre une porte à la terre de la douleur; laquelle vous ne voulez pas entrer.
b) mettre interfaces sur vos énumérations
Sérieusement, je pense que de nos jours il n'y a qu'un seul bon de cas d'utilisation pour les énumérations; et c'est à les utiliser comme des singletons qui fournissent un certain niveau de service. Et puis, je fais ceci:
Bien sûr, ce n'est pas vraiment utile lorsque vous utiliser les énumérations comme vous le faites. Mais le truc, c'est: vous ne devriez pas utiliser les énumérations de cette façon de toute façon. Parce que l'utilisation des énumérations de cette façon conduit à des éclats de code - chaque place que prend un enum variable est dans le besoin pour de telles instructions de commutation; avec toutes les conséquences négatives lorsque vous ajoutez /supprimez enum cas.
Donc, dans votre cas: essayer de se tourner vers le vrai OO dessins, où vous avez les classes de base abstraites que de définir des méthodes; et puis vous utilisez les usines, afin de créer des sous-classes (probablement basé sur les enum interrupteurs) qui vous donnent des objets qui, tout simplement, faire la bonne chose.
OriginalL'auteur GhostCat