使用反射来测试asyncTask中的doInBackground()方法

时间:2017-07-06 15:38:26

标签: java android reflection android-asynctask

AsyncTask.class中doInBackground方法的方法签名如下所示:

protected Boolean doInBackground(MyObject... params);

在反射测试中,它看起来像这样:

try {
Method doInBackgroundMethod = asyncTaskInstance.getClass().getDeclaredMethod("doInBackground", MyObject[].class);
            doInBackgroundMethod.setAccessible(true);
            boolean success = (boolean) doInBackgroundMethod.invoke(asyncTaskInstance, myObjectInstance);
            Assert.assertTrue(success);
} catch ...

但是我收到以下错误:

java.lang.IllegalArgumentException: argument type mismatch, on line "doInBackgroundMethod.invoke(asyncTaskInstance, myObjectInstance);"

是的,我知道有两种方法具有相同的签名,因此我正在寻找解决此问题的方法。

1 个答案:

答案 0 :(得分:0)

而不是MyObject[].class使用Object[].class因为doInBackground在init期间使用类型set并在调用doInBackground时自动转换为此类型,但是当您手动执行此操作时 - 您还需要手动进行转换。