删除Android Espresso测试的文件

3

我有一个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();
        }
    }
}

然而,它并没有删除文件。我认为上下文可能不正确。有没有一种方法可以在espresso测试开始时清除内部存储?

这些文件是“.ser”文件。


2
你是想从应用程序的“文件”文件夹还是测试应用程序的“文件”文件夹中删除文件? - Anatolii
3个回答

1

您尝试过使用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

我遇到了同样的问题。解决方法只是将getContext()更改为getTargetContext()

mContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
    File[] files = mContext.getFilesDir().listFiles();
    if(files != null){
        for(File file : files) {
            file.delete();
        }
    }

就是这么简单 :)

简单直接,直到你发现了限制。首先创建您的活动,然后运行设置,使其为您工作,直到它不能为止。 - Renetik

0
在Kotlin中...
@BeforeClass
fun beforeClass() {
    getInstrumentation().targetContext.filesDir.deleteRecursively()
}

@RunWith(AndroidJUnit4::class)
@LargeTest
class SomeTest {
    
    @Test
    fun someFreshInstallationTest() {
        ...
    }
    
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接