關於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,實在是模仿不來啊。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章