我有下一个JUnit测试,但是执行时抛出“对象不是声明方法的实例”。
会是什么呢?
@Test
public void testCopiarByteArray() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, InstantiationException, UnsupportedEncodingException{
String expected = "prueba";
String mensaje = "prueba";
DataReader datareader = new DataReader(null, null, 100, "=");
Method copiarByteArray = datareader.getClass().getDeclaredMethod("copiarByteArray", byte[].class, int.class);
copiarByteArray.setAccessible(true);
byte[] copia = (byte[]) copiarByteArray.invoke(mensaje.getBytes(), mensaje.getBytes().length);
String actual = new String(copia, "UTF-8");
assertEquals("failure - encription not correctly encript", expected, actual);
}
最佳答案
.invoke
的第一个参数应该是在其上调用方法的对象的实例。
所以代替:
byte[] copia = (byte[]) copiarByteArray.invoke(mensaje.getBytes(), mensaje.getBytes().length);
您需要添加
datareader
作为第一个参数: byte[] copia = (byte[]) copiarByteArray.invoke(datareader, mensaje.getBytes(), mensaje.getBytes().length);