Android: 模拟 Resources.openRawResource(int)

Android: mock Resources.openRawResource(int)

我正在尝试测试一些调用 context.getResources().openRawResource(rawResourceId) (docs) 的代码,其中资源是要从中读取的文本文件。

我的测试 class 扩展了 AndroidTestCase

我怎样才能模拟这个调用 return 我想要的任何文件内容?

假设您能够设置要测试的代码的 Context,您可以通过创建以下两个 class 来实现(我倾向于将它们设为私有 classes 在我的测试中 class 因为它们包含测试特定信息):

private class mMockContext extends MockContext {

    @Override
    public Resources getResources() {
        return new mMockResources();
    }
}

private class mMockResources extends MockResources {

    @Override
    public InputStream openRawResource(int id) {
        String fileContents = "line one\n" +
        "line two\n" +
        "line three";

        return new ByteArrayInputStream(fileContents.getBytes());
    }
}

然后,当您创建要测试的 class 时,将 mMockContext class 代替 Context.

传递给它