在 Android Instrumentation 上下文中写入/创建文件

Write/create file within Android Instrumentation context

提问人:mato 提问时间:3/28/2014 最后编辑:Brian Tompsett - 汤莱恩mato 更新时间:9/16/2023 访问量:1715

问:

我有一个类,它创建(或打开)一个文件以向其写入一些数据。此类在构造函数中接收 Context,将其保存在实例字段中,然后使用它来调用 context.openFileOutput 方法。

运行应用程序时,我通过将 ApplicationContext 作为 Context 传递来实例化此类,一切都按预期工作。

但是,当我尝试使用 Instrumentation Test 测试此类时,我得到一个 .我正在传递上下文,我知道它对应于测试的上下文,而不是真正的应用程序的上下文。NullPointerExceptiongetInstrumentation().getContext()

getInstrumentation().getContext().openFileOutput("myFile", Context.MODE_PRIVATE); // This throws NullPointerException :( :(

在测试中,我需要在测试包中创建此文件,而不是在应用包中创建此文件,因为我不想覆盖应用中的文件。

我知道那里有一个类,但我无法将此上下文传递给我的类,因为我的类也打开了一个原始资源,并且我希望该资源在运行测试时有所不同(类似于模拟资源)。RenamingDelegatingContext

我搜索了很多关于这方面的内容,但没有关于 Instrumentation Context 的文档。我找不到它的局限性,也找不到任何能解决我问题的东西。

你知道如何解决这个问题吗?

Android 测试 android-context 插桩

评论

2赞 Brian Risk 4/29/2017
你有没有找到解决方案?

答:

-2赞 Will Passidomo 8/22/2017 #1

我不记得这是什么时候更改的,但是在插桩测试期间获取对象的当前方法是导入Context

import android.support.test.InstrumentationRegistry;

并调用

InstrumentationRegistry.getContext();

希望这有帮助!