我想对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
我的方法也没有被调用。
ShadowContext
是ShadowContextWrapper
的超类,是Context
的影子,但是我找不到所调用的getFilesDir()
的具体实现。所以我的问题是:是否可以遮盖
getFilesDir()
?如果是这样,怎么办? 最佳答案
我不确定您要做什么,但是我已经使用以下方法来获取Robolectric测试中的数据目录:
RuntimeEnvironment.application.getApplicationContext().getFilesDir();
由此,我能够为测试中出于任何目的创建虚拟文件。希望能帮助到你。