Diese Frage entsteht beim Versuch, Testfälle zu schreiben. Foo ist eine Klasse innerhalb der Framework-Bibliothek, auf die ich keinen Quellzugriff habe.
%Vor%meine Anwendungen werden
%Vor%Der Komponententest kann nicht initialisiert werden, da ich aufgrund anderer Abhängigkeiten kein Foo-Objekt erstellen kann. Der BarTest löst einen Nullzeiger aus, da der Wert null ist.
%Vor%Kann ich reflection api verwenden, um getX () auf nicht-final zu setzen? oder wie soll ich testen?
Seb ist richtig, und nur um sicherzustellen, dass Sie eine Antwort auf Ihre Frage bekommen, kurz etwas in nativem Code zu tun (und ich bin mir ziemlich sicher, dass das nicht funktionieren würde) oder den Bytecode der Klasse zur Laufzeit zu modifizieren und zu erstellen die Klasse, die die Methode zur Laufzeit überschreibt, kann ich keine Möglichkeit sehen, die "Finalität" einer Methode zu ändern. Reflektion wird dir hier nicht helfen.
Wenn Ihr Unit-Testfall Foo aufgrund anderer Abhängigkeiten nicht erstellen kann, könnte das ein Zeichen dafür sein, dass Sie den Unit-Test nicht von Anfang an richtig machen.
Komponententests dienen dazu, unter denselben Umständen einen Produktionscode zu testen. Daher würde ich vorschlagen, die gleiche Produktionsumgebung in Ihren Tests wiederherzustellen. Andernfalls wären Ihre Tests nicht vollständig.
Wenn die von getX()
zurückgegebene Variable nicht final
ist, können Sie die in Was ist der beste Weg zum Unit-Testen privater Methoden? zum Ändern des Wertes der private
-Variable durch Reflection
.
Tags und Links java reflection methods final