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
.
传递给它
我正在尝试测试一些调用 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
.