问题
我想创建一个自定义的ShadowContextWrapper并实现getExternalFilesDirs(),以便它与AppCompat KitKat兼容。
然而,当我这样做时,我收到以下错误:
java.lang.IllegalArgumentException:尝试在类org.robolectric.shadows.ShadowApplication的实例上调用public java.io.File robolectric.ShadowContextWrapper.getExternalFilesDirs(java.lang.String),但ShadowApplication不会扩展ShadowContextWrapper
对于那些好奇的人,在robolectric测试中当SDK为21而不是18时,输出错误:
显示java.lang.NullPointerException
在android.app.ContextImpl.ensureDirsExistOrFilter(ContextImpl.java:2388) 在android.app.ContextImpl.getExternalFilesDirs(ContextImpl.java:1046) android.content.ContextWrapper.getExternalFilesDirs(ContextWrapper.java:216)在android.support.v4.content.ContextCompatKitKat.getExternalFilesDirs(ContextCompatKitKat.java:29) 在android.support.v4.content.ContextCompat.getExternalFilesDirs(ContextCompat.java:220)
代码
/**
* Shadow for {@link android.content.ContextWrapper}.
*/
@Implements(ContextWrapper.class)
public class ShadowContextWrapper extends org.robolectric.shadows.ShadowContextWrapper {
public static final String TAG = ShadowContextWrapper.class.getSimpleName();
@Implementation
public File getExternalFilesDirs(String type) {
Log.d(TAG, "Custom Shadow: " + Thread.currentThread().getStackTrace()[1].getMethodName());
return Environment.getExternalStoragePublicDirectory(type);
}
}