提问者:小点点

删除文件进行Android浓缩咖啡测试


我有一个MainMenu活动,它从文件中获取数据并显示出来。我希望数据在每次浓缩咖啡测试开始时被删除,并且在测试之间不会持续。

我尝试了以下方法:

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 '文件。


共3个答案

匿名用户

您是否尝试过使用 adb 外壳命令?

在Espresso测试中,我尝试了一件有助于删除文件的事情,那就是以编程方式执行ADB shell命令。类似这样:

(静态编程语言示例)

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接口。请看这个答案和本页的例子,看看你如何做到这一点。

示例可能如下所示:

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

希望这有帮助。

匿名用户

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

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

就这么简单:)

匿名用户

在科特林。。

@BeforeClass
fun beforeClass() {
    getInstrumentation().targetContext.filesDir.deleteRecursively()
}

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