我有一个MainMenu活动,它从文件中获取数据并显示它。我希望在每次espresso测试开始时删除数据,并且不要在测试之间保持不变。
我尝试了以下内容:
Context mContext;
@Before
public void setUp() {
mContext = InstrumentationRegistry.getInstrumentation().getContext();
File[] files = mContext.getFilesDir().listFiles();
if(files != null){
for(File file : files) {
file.delete();
}
}
}
但是,它不是删除文件。我认为上下文可能不正确。有没有办法在浓缩咖啡测试开始时清除内部存储?
这些文件是' .ser'文件。
答案 0 :(得分:0)
您是否尝试过使用adb shell命令?
我尝试过的有助于删除Espresso测试中的文件的一件事是以编程方式执行ADB shell命令。像这样:
(Kotlin样本)
val dir = Environment.getExternalStorageDirectory()
val file = File(dir.absolutePath
+ File.separator + directoryInExtStorageDir
+ File.separator + fileName)
InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand(
"rm -f " + file.absolutePath)
Java看起来像这样:
File dir = Environment.getExternalStorageDirectory()
File file = new File(dir.getAbsolutePath()
+ File.separator + directoryInExtStorageDir
+ File.separator + fileName)
InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand(
"rm -f " + file.getAbsolutePath())
至于寻找特定类型的文件,您可以使用FilenameFilter或FileFilter接口。有关如何执行此操作的示例,请参阅this answer和this page。
示例可能如下所示:
File dir = Environment.getExternalStorageDirectory();
File directory = new File(dir.getAbsolutePath()
+ File.separator + directoryInExtStorageDir);
List<File> filesToDelete = Arrays.asList(directory.listFiles((new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".ser");
}
})));
filesToDelete.forEach(file->{
InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand(
"rm -f " + file.getAbsolutePath());
});
希望有所帮助。
答案 1 :(得分:0)
我遇到了同样的问题。解决方案只是将getTargetContext()的getContext()更改为
mContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
File[] files = mContext.getFilesDir().listFiles();
if(files != null){
for(File file : files) {
file.delete();
}
}
就这么简单:)