Как проверить, что был вызван нестатический метод частного вложенного класса? Это то, что я до сих пор:Проверка вызова нестатического метода частного статического вложенного класса статического внешнего класса
new Verifications() {
{
Deencapsulation.invoke(MyClass.class.getDeclaredClasses()[0], "run");
times = 4;
}
};
я получаю это:
java.lang.IllegalArgumentException: Attempted to invoke non-static method without an instance to invoke it on...
Update 1:
@Dennis, я попытался следующие, хотя я Получая NPE
. Я хотел бы проверить работу метода run
против синглтона, который уже находится в JVM, и не создавать его новый экземпляр (как в приведенном ниже коде), чтобы вызвать метод m
. Я пробовал звонить m.invoke(null)
без успеха. Есть ли способ проверить вызов (через его вызов) в jmockit нестатического метода в частном вложенном классе, используя отражение в исполняемом экземпляре внешнего класса?
new Verifications() {
Class c = MyClass.class.getDeclaredClasses()[0];
Method m = c.getDeclaredMethod("run");
//Method m = MyClass.class.getDeclaredClasses()[0].getDeclaredMethod("run", Integer.class, CallableClient.class);
//Deencapsulation.invoke(MyClass.class.getDeclaredClasses()[0], "run");
Class[] a = new Class[] { Integer.class, CallableClient.class};
Object cc = Deencapsulation.newInstance(c, a);
//Object cc = Deencapsulation.newInstance(c, withInstanceOf(Integer.class), withInstanceOf(CallableClient.class));
{
try {
System.out.println(MyClass.class.getDeclaredClasses()[0].getName());
m.invoke(cc);
times = 3;
Update 2:
После безуспешных попыток получить метод, как это: final Field runnable = MyClass.class.getDeclaredField("nestedClassInstance"); runnable.setAccessible(true);
, а затем с помощью getDeclaredMethods()
, а также getMethods()
, я решил, что это слишком много плохого с этим подходом, чтобы продолжить это. Я изменил то, что тестирую в своем тесте. Несмотря на то, что я представил экземпляр внутреннего вложенного класса, я предполагаю, что причина, по которой я не могу увидеть метод run
, может быть связана с одним или всеми из: вложенным характером его содержащего класса, конструкторов и java поведение/решение не отображать методы экземпляра, пока оно не сможет обеспечить успешное построение экземпляра. Любопытно узнать, почему я не мог, хотя, с уверенностью.
Вы ищете способ узнать во время работы? Это можно сделать через отражение. –
Да, я. Как будет выглядеть этот подход? – Saad
Для этого требуется экземпляр внешнего класса, которого я избегаю, хотя, возможно, нет другого выбора, кроме как его создать: http: // jmockit.googlecode.com/svn/trunk/www/tutorial/ReflectionUtilities.html. Нет никакого публичного конструктора или какого-либо общедоступного метода для получения/экземпляра внешнего класса. – Saad