我想要追踪
我尝试追踪
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()
,而这个方法并没有被覆盖。
ShadowContextWrapper
对ContextWrapper
进行了覆盖。但即使我覆盖了ContextWrapper
,修改了我的类头部信息为
@Implements(ContextWrapper.class)
public class MyShadow extends ShadowContextWrapper
我的方法也没有被调用。
ShadowContext
是ShadowContextWrapper
的超类,是Context
的影子,但我找不到被调用的getFilesDir()
的具体实现。
所以我的问题是:是否可以影响getFilesDir()
?如果可以,如何影响?
/tmp/<random string>/files
。我的意图是将该目录更改为指向/tmp/<random string>/data/data/com.myapp/files
这样的路径。我尝试使用部分模拟替换应用程序,以便getFilesDir()
返回所需的路径,但似乎没有任何变化... - ris8_allo_zen0getApplicationContext()
方法进行部分模拟,并将其指向原始上下文的部分模拟,以便将其指向所需位置。虽然这听起来有点麻烦,但另一种选择是使用一些依赖注入来重新实现上下文方法。 - J.C. ChaparroFile filesDir = new File(testRoot, "data/data/" + RuntimeEnvironment.application.getPackageName() + "/files"); RuntimeEnvironment.application = spy(RuntimeEnvironment.application); when(RuntimeEnvironment.application.getApplicationContext()).thenReturn(RuntimeEnvironment.application);when(RuntimeEnvironment.application.getFilesDir()).thenReturn(filesDir);
- ris8_allo_zen0