找不到兼容的方法:将对象传递给方法时出错?

我正在尝试为我们拥有的一些旧遗留代码编写junit

下面是我正在编写junit的DataLogger类中的方法,我正在使用jmockit –

private Object[] extractMessageObjects(final Object... objects) { Object[] result = new Object[objects.length - 1]; System.arraycopy(objects, 0, result, 0, result.length); return result; } 

所以下面的测试应该可行。 对?

 @Test public void testLogDebugWithStackTrace() { DataLogger logger = DataLogger.getInstance(ClientTest.class); Object obj[] = new Object[] {1}; Deencapsulation.invoke(logger, "extractMessageObjects", obj); } 

但我得到例外 –

 No compatible method found: extractMessageObjects(java.lang.Integer) 

我在这里做错了吗?

在您使用的invoke(..)方法中,方法的参数类型是从Object[]的元素类型解析的。 由于你的包含一个Integer ,jmockit会尝试找到一个接受和Integer的方法。 它会失败,因为这种方法不存在。

 No compatible method found: extractMessageObjects(java.lang.Integer) 

相反,您可以使用接受参数类型的重载方法

 Deencapsulation.invoke(new Example(), "extractMessageObjects", new Class[] { Object[].class }, (Object) new Object[] { 1 }); 

这样它就可以正确地找到合适的方法,而不需要使用您使用的参数类型的提示。 请注意,必须转换最后一个参数,以便将其用作Deencapsulation.invoke(..)方法的目标Object[]参数中的唯一元素。