我有下一个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);

10-07 22:35