I have a ContentProvider that accesses files from Context.getFilesDir() via a helper class StorageHelper that creates the necessary directory in its constructor:
StorageHelper(Context ctx) throws FileNotFoundException {
// Set up directories and makes sure the final directory exists
eventsDir = new File(ctx.getFilesDir(), SUBDIR);
if(!eventsDir.exists()) {
eventsDir.mkdirs();
}
}
In my ContentProvider's onCreate(), an instance of this helper is created with the Context of the ContentProvider:
public boolean onCreate() {
Context context = getContext();
// Set up file helper
try {
fileHelper = new LESStorageHelper(context);
}
catch(FileNotFoundException e) {
Log.e(getClass().getSimpleName(), "Unable to create content provider " + e.toString());
return false;
}
return true;
}
I have set up an instrumented test case that will test my ContentProvider, but the call to Context.getFilesDir() returns /dev/null, which seems to be due to the context of the ContentProvider. I mock the Context.getFilesDir() in my test class, which allows me to check the status of the files that should be created, but I haven't been able to get the ContentProvider and thus its StorageHelper to be set up with that same context. I have tried setContext(), but that doesn't seem to work.
@Mock private Context context;
@Rule public TemporaryFolder testFilesDir = new TemporaryFolder();
private StorageHelper storageHelper;
@Before
@Override
public void setUp() throws Exception {
super.setUp();
initMocks(this);
when(context.getFilesDir()).thenReturn(testFilesDir.newFolder());
setContext(context);
storageHelper = new StorageHelper(context);
}
Is there a way for me to pass the context to my ContentProvider or intercept the call to getFilesDir() so that it works consistently through both normal use and in a testing environment? Is there something that I may have missed here? I haven't been able to find any documentation about testing a ContentProvider that uses files instead of sqlite.
Aucun commentaire:
Enregistrer un commentaire