Class.getResourceAsStream 在Robolectric 环境中无法return 更正M 平台中的流
Class.getResourceAsStream in Robolectric environment fails to return correct stream in M platform
我在 robolectric runner 中切换到 M
平台时遇到问题。
Class.getResourceAsStream
在使用 Build.VERSION_CODES.M
和 Build.VERSION_CODES.LOLLIPOP_MR1
时似乎表现不同
我的应用程序使用 PhoneUtils 库,该库使用以下代码加载其元数据:
static final MetadataLoader DEFAULT_METADATA_LOADER = new MetadataLoader() {
@Override
public InputStream loadMetadata(String metadataFileName) {
return MetadataManager.class.getResourceAsStream(metadataFileName);
}
};
配置测试时:
@Config(
constants = BuildConfig::class,
sdk = intArrayOf(Build.VERSION_CODES.M)
)
结果 JarUrlConnection
设置为:
sun.net.www.protocol.jar.JarURLConnection:jar:file:/C:/Users/motorro/.m2/repository/org/robolectric/android-all/6.0.0_r1-robolectric-0/android-all-6.0.0_r1-robolectric-0.jar!/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
(指 roboelectric platform mock)读取文件失败
如果配置为:
@Config(
constants = BuildConfig::class,
sdk = intArrayOf(Build.VERSION_CODES.LOLLIPOP_MR1)
)
结果 JarUrlConnection
设置为:
sun.net.www.protocol.jar.JarURLConnection:jar:file:/C:/Users/motorro/.gradle/caches/modules-2/files-2.1/com.googlecode.libphonenumber/libphonenumber/8.0.0/ce021971974ee6a26572e43eaba7edf184c3c63d/libphonenumber-8.0.0.jar!/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
指向正确的库文件(测试通过)。
这是测试:
@RunWith(RobolectricTestRunner::class)
class ExampleUnitTest {
companion object {
private val PHONE: Phonenumber.PhoneNumber
init {
PHONE = Phonenumber.PhoneNumber()
PHONE.countryCode = 7
PHONE.nationalNumber = 4956360636
}
}
@Test
@Config(
constants = BuildConfig::class,
sdk = intArrayOf(Build.VERSION_CODES.LOLLIPOP_MR1)
)
fun withLollipop() {
PhoneNumberUtil.getInstance().format(PHONE, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL)
}
@Test
@Config(
constants = BuildConfig::class,
sdk = intArrayOf(Build.VERSION_CODES.M)
)
fun withM() {
PhoneNumberUtil.getInstance().format(PHONE, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL)
}
}
这是机器人电气问题还是我在这里遗漏了一些配置?
现在的管道胶带解决方案是@Config
单独处理所有失败的测试。
当前依赖项:
compile 'com.googlecode.libphonenumber:libphonenumber:8.0.0'
testCompile 'junit:junit:4.12'
testCompile "org.robolectric:robolectric:3.1.4"
Here是一个完整的测试项目,方便大家使用。
问题已在 Robolectric 3.2.2
中修复
我在 robolectric runner 中切换到 M
平台时遇到问题。
Class.getResourceAsStream
在使用 Build.VERSION_CODES.M
和 Build.VERSION_CODES.LOLLIPOP_MR1
我的应用程序使用 PhoneUtils 库,该库使用以下代码加载其元数据:
static final MetadataLoader DEFAULT_METADATA_LOADER = new MetadataLoader() {
@Override
public InputStream loadMetadata(String metadataFileName) {
return MetadataManager.class.getResourceAsStream(metadataFileName);
}
};
配置测试时:
@Config(
constants = BuildConfig::class,
sdk = intArrayOf(Build.VERSION_CODES.M)
)
结果 JarUrlConnection
设置为:
sun.net.www.protocol.jar.JarURLConnection:jar:file:/C:/Users/motorro/.m2/repository/org/robolectric/android-all/6.0.0_r1-robolectric-0/android-all-6.0.0_r1-robolectric-0.jar!/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
(指 roboelectric platform mock)读取文件失败
如果配置为:
@Config(
constants = BuildConfig::class,
sdk = intArrayOf(Build.VERSION_CODES.LOLLIPOP_MR1)
)
结果 JarUrlConnection
设置为:
sun.net.www.protocol.jar.JarURLConnection:jar:file:/C:/Users/motorro/.gradle/caches/modules-2/files-2.1/com.googlecode.libphonenumber/libphonenumber/8.0.0/ce021971974ee6a26572e43eaba7edf184c3c63d/libphonenumber-8.0.0.jar!/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
指向正确的库文件(测试通过)。
这是测试:
@RunWith(RobolectricTestRunner::class)
class ExampleUnitTest {
companion object {
private val PHONE: Phonenumber.PhoneNumber
init {
PHONE = Phonenumber.PhoneNumber()
PHONE.countryCode = 7
PHONE.nationalNumber = 4956360636
}
}
@Test
@Config(
constants = BuildConfig::class,
sdk = intArrayOf(Build.VERSION_CODES.LOLLIPOP_MR1)
)
fun withLollipop() {
PhoneNumberUtil.getInstance().format(PHONE, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL)
}
@Test
@Config(
constants = BuildConfig::class,
sdk = intArrayOf(Build.VERSION_CODES.M)
)
fun withM() {
PhoneNumberUtil.getInstance().format(PHONE, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL)
}
}
这是机器人电气问题还是我在这里遗漏了一些配置?
现在的管道胶带解决方案是@Config
单独处理所有失败的测试。
当前依赖项:
compile 'com.googlecode.libphonenumber:libphonenumber:8.0.0'
testCompile 'junit:junit:4.12'
testCompile "org.robolectric:robolectric:3.1.4"
Here是一个完整的测试项目,方便大家使用。
问题已在 Robolectric 3.2.2
中修复