删除用于Android Espresso测试的文件



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

您是否尝试过使用ADB shell命令?

我尝试的一件事有助于在浓缩咖啡测试中删除文件,这是通过编程执行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接口。有关如何执行此操作的示例,请参见此答案和此页面。

一个例子可能是这样:

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

希望有所帮助。

我遇到了相同的问题。该解决方案只是更改getTargetContext()

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

很简单:)

in Kotlin ..

@BeforeClass
fun beforeClass() {
    getInstrumentation().targetContext.filesDir.deleteRecursively()
}
@RunWith(AndroidJUnit4::class)
@LargeTest
class SomeTest {
    
    @Test
    fun someFreshInstallationTest() {
        ...
    }
    
}

最新更新