我有下一个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);
}
答案 0 :(得分:1)
.invoke
的第一个参数应该是调用方法的对象的实例。
所以而不是:
byte[] copia = (byte[]) copiarByteArray.invoke(mensaje.getBytes(), mensaje.getBytes().length);
您需要添加datareader
作为第一个参数:
byte[] copia = (byte[]) copiarByteArray.invoke(datareader, mensaje.getBytes(), mensaje.getBytes().length);
答案 1 :(得分:0)
检查反射API上的javadoc。
您必须将对象作为第一个参数调用 on ;然后是"实际"方法参数。
您的代码尝试在mensaje.getBytes()
上执行方法;这当然行不通。