我想对Context.getFilesDir()进行阴影处理,以“虚拟化”我的应用程序在测试环境中运行的文件系统,但是找不到合适的封闭类来进行阴影处理。

我尝试遮蔽Context

@Implements(Context.class)
public class MyShadow extends ShadowContext {
    private File testRoot;

    public MyShadow() {
        testRoot = new File(FileUtils.getTempDirectory(), "androidTestRoot-" + System.currentTimeMillis());
    }

    @Implementation
    public File getFilesDir() {
        return new File(testRoot, "data/data/com.myapp/files");
    }
}


但是永远不会调用该方法,因为显然我的应用程序调用了ContextWrapper.getFilesDir()而不是阴影。

ContextWrapper被Robolectric的ShadowContextWrapper遮盖。但是即使我将ContextWrapper的阴影更改为

@Implements(ContextWrapper.class)
public class MyShadow extends ShadowContextWrapper


我的方法也没有被调用。

ShadowContextShadowContextWrapper的超类,是Context的影子,但是我找不到所调用的getFilesDir()的具体实现。

所以我的问题是:是否可以遮盖getFilesDir()?如果是这样,怎么办?

最佳答案

我不确定您要做什么,但是我已经使用以下方法来获取Robolectric测试中的数据目录:

RuntimeEnvironment.application.getApplicationContext().getFilesDir();


由此,我能够为测试中出于任何目的创建虚拟文件。希望能帮助到你。

10-08 09:08