关于Robolectric对JNI的支持问题

首先明确,目前最新版Robolectric3是不支持任何JNI lib和调用的,可以参见:

http://stackoverflow.com/questions/10425591/robolectric-tanks-on-application-objects-that-load-jni-libraries-can-i-get-a-wo

和官方github issue:

https://github.com/robolectric/robolectric/issues/1171

以上两者都明确说明了,目前作者还不知道怎么实现对Native libraries的支持。只能对未来保持憧憬和期待吧。。。

对于比较复杂的应用来说,不支持JNI这件小事会直接导致Robolectric单元测试变的很鸡肋吧!瞬间就残了!

不过stackoverflow上一位外国哥们给出了折衷(将就)的方案,也算是个办法:

大概意思是在测试方法的初始化阶段配置系统property为:

ROBOLECTRIC=TRUE
System.setProperty("ROBOLECTRIC","TRUE")

然后在JNI库加载的时候

class MyClass {
    if(System.getenv("ROBOLECTRIC") == null) {
        System.loadLibrary("libname");
    }
}

当然,所有的jni native的方法都不能在UT中被调用了。哥只能帮你们到这里了。。。

看来,顺滑的TDD流程在Android开发中还是没能发展出完美的解决方案。

这主要是因为复杂多变Android的运行环境造成的吧,看我72变的arm指令集+邪恶变异体linux core+邪恶变异体jvm,实在是模仿不来啊。



你可能感兴趣的:(Android,Build,Android测试)