删除android espresso测试的文件

时间:2017-12-04 21:10:56

标签: android android-testing android-espresso android-espresso-recorder

我有一个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'文件。

2 个答案:

答案 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 answerthis 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();
        }
    }

就这么简单:)