Robolectric自定义ShadowContextWrapper

时间:2015-08-10 22:15:44

标签: android unit-testing robolectric

问题

我想创建一个自定义的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);
    }

}

0 个答案:

没有答案