JUnit异常" Object不是声明方法的实例"

时间:2016-05-29 17:39:54

标签: java unit-testing junit

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

2 个答案:

答案 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()上执行方法;这当然行不通。