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

mat*_*ato 18 testing instrumentation android android-context

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

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

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

getInstrumentation().getContext().openFileOutput("myFile", Context.MODE_PRIVATE); // This throws NullPointerException :( :(
Run Code Online (Sandbox Code Playgroud)

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

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

我对此进行了大量搜索,并且没有关于Instrumentation Context的文档.我无法找到它的局限性,也无法解决我的问题.

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

小智 -2

我不记得什么时候改变了,但Context在仪器测试期间获取对象的当前方法是导入

import android.support.test.InstrumentationRegistry;

并打电话

InstrumentationRegistry.getContext();

希望这可以帮助!