Ich habe eine Hilfsmethode, um die Getter-Methode eines Objekts für ein bestimmtes Feld zu finden (mit Reflektion):
%Vor% Ich möchte einen Komponententest schreiben, der die SecurityException
Das Javadoc gibt an, dass getMethod
die SecurityException
Wenn ein Sicherheitsmanager s vorhanden ist und einer der folgenden Punkte Bedingungen erfüllt ist:
Aufruf von s.checkMemberAccess (this, Member.PUBLIC) verweigert den Zugriff auf die Methode
Der Klassenlader des Aufrufers ist nicht derselbe oder ein Vorgänger des Klassenladeprogramms für die aktuelle Klasse und der Aufruf von s.checkPackageAccess () verweigert den Zugriff auf das Paket dieser Klasse
Ich würde es vorziehen, die Ausnahme normal auszulösen, anstatt auf ein spöttisches Framework zurückzugreifen.
Was dies in einer normalen Einstellung verursacht, gibt es sehr wenige Fälle, wo dies passieren kann.
Nicht öffentliche Methoden führen zu NoSuchMethodException
, weil getMethod
spezifisch nur nach öffentlichen Methoden sucht. getDeclaredMethod
findet die Methode, erlaubt aber die Rückgabe von privaten / geschützten Methoden.
Der einzige wirkliche Weg, dies zu tun, ist, wie die Javadocs sagen, ein separates Paket, das durch den Sicherheitsmanager geschützt ist. Ich vermute, dass dies nur mit unsignierten Applets oder ähnlichen Berechtigungen möglich ist. (Ich bin selbst nie darauf gestoßen, also bin ich mir nicht ganz sicher)
Am besten erzwingen Sie, dass die Ausnahme für bestimmte Methoden ausgelöst wird, indem Sie den Sicherheitsmanager außer Kraft setzen.
Tags und Links java reflection junit