我想隐藏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()
?如果是这样,怎么样?
答案 0 :(得分:2)
我不确定你要做什么,但我已经使用以下内容在Robolectric测试中获取数据目录:
RuntimeEnvironment.application.getApplicationContext().getFilesDir();
从那时起,我就能够在测试中为我需要的任何目的创建虚拟文件。希望它有所帮助。