Mock ein enum mit Mockito in Java
Wie kann ich verspotte ein enum für Testzwecke mit Mockito? Angesichts dieser Probe für die enum:
public enum TestEnum {
YES,
NO
}
und diese für die Methode mit der enum:
public static boolean WorkTheEnum(TestEnum theEnum) {
switch (theEnum) {
case YES:
return true;
case NO:
return false;
default:
//throws an exception here
}
}
wie kann ich verspotte die enum zu erreichen, die default-Zweig der switch-Schleife? Diese Antwort sagt Mockito kann nicht verspotten Enumerationen, aber die Antwort hat auch mehr als vor einem Jahr. Ich kann mock ein enum mittlerweile oder ich lass den Zweig bleiben ungetestet? Anderen Mocking-frameworks verwendet werden kann.
Es gibt hacky Möglichkeiten, dies zu tun: Hacking Enums und Ändern von "final static" Felder
Enum sind wie statische Klasse, somit können Sie nicht moke mit mokito.In Ihrer Probe, den Standard nicht erreichbar ist, so kann man nicht testen.
Warum testen wollen, ein unerreichbarer Pfad?
Was sind Sie expecintg,
zum Beispiel
Enum sind wie statische Klasse, somit können Sie nicht moke mit mokito.In Ihrer Probe, den Standard nicht erreichbar ist, so kann man nicht testen.
Warum testen wollen, ein unerreichbarer Pfad?
Was sind Sie expecintg,
MAYBE
- ??zum Beispiel
InformationsquelleAutor Arthur Eirich | 2016-07-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei Antworten:
a) Sie könnte sich zu einigen PowerMock-wie mocking framework. Meine zwei cent(entences) es:, Tue das nicht. PowerMock öffnet eine Türe in das land der Schmerzen, die Sie nicht wollen, zu geben.
b) welche Schnittstellen sich auf Ihrem enums
Ernst; ich heutzutage denke, dass es nur ein guter use-case für enums; und das ist, um Sie als singletons, die einen bestimmten service. Und dann, so mache ich das:
Natürlich, dies gilt nicht wirklich helfen, wenn Sie Enumerationen, wie man es tut. Aber die Sache ist die: man sollte nicht mit enums, die Art und Weise sowieso. Denn die Verwendung von Enumerationen dieser Weg führt zu zerschlagen-code - jeder Ort, nimmt eine enum-variable ist in der Notwendigkeit für eine solche switch-Anweisungen; mit all den negativen Folgen, wenn Sie hinzufügen /entfernen enum Fällen.
So, in Ihrem Fall: sollten Sie auf echte OO-designs - wobei man abstrakte Basis-Klassen, die Methoden definieren, und dann Sie verwenden, Fabriken zu erstellen, die Unterklassen (wahrscheinlich basierend auf enum switches), die Ihnen Objekte, die einfach das richtige tun.
InformationsquelleAutor GhostCat