在Robolectric 3中隐藏getFilesDir()

时间:2015-07-13 11:29:51

标签: android robolectric

我想隐藏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 

我的方法也没有被调用。

<{> 1}}是ShadowContext的超类,是ShadowContextWrapper的阴影,但我无法找到被调用的Context的具体实现。

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

1 个答案:

答案 0 :(得分:2)

我不确定你要做什么,但我已经使用以下内容在Robolectric测试中获取数据目录:

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

从那时起,我就能够在测试中为我需要的任何目的创建虚拟文件。希望它有所帮助。