Мы пытаемся интегрировать robolectric в наш проект, но запустили в некоторые неожиданные проблемы.Robolectric NoClassDefFoundError с пакетами org.apache
Проект компилируется отлично, когда мы не используем Robolectric. Тем не менее, мы получаем NoClassDefFoundError в пакетах org.apache.http при запуске простых тестов с Robolectric.
Exception in thread "Thread-1" java.lang.NoClassDefFoundError: org/
apache/http/HttpRequest
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.lang.ClassLoader.defineClass(ClassLoader.java:466)
at javassist.Loader.findClass(Loader.java:379)
at
com.xtremelabs.robolectric.bytecode.RobolectricClassLoader.findClass(Robole ctricClassLoader.java:
60)
at javassist.Loader.loadClass(Loader.java:311)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at
com.xtremelabs.robolectric.bytecode.RobolectricClassLoader.loadClass(Robole ctricClassLoader.java:
37)
at se.hsr.android.Info.updateInfoFromWebService(Info.java:57)
at se.hsr.android.Info$2.run(Info.java:99)
Caused by: java.lang.ClassNotFoundException: caught an exception while
obtaining a class file for org.apache.http.HttpRequest
at javassist.Loader.findClass(Loader.java:359)
at
com.xtremelabs.robolectric.bytecode.RobolectricClassLoader.findClass(Robole ctricClassLoader.java:
60)
at javassist.Loader.loadClass(Loader.java:311)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at
com.xtremelabs.robolectric.bytecode.RobolectricClassLoader.loadClass(Robole ctricClassLoader.java:
37)
... 11 more
Caused by: java.lang.IllegalStateException: shouldn't be modifying
bytecode after we've started writing cache!
class=org.apache.http.HttpRequest
at
com.xtremelabs.robolectric.bytecode.AndroidTranslator.onLoad(AndroidTransla tor.java:
68)
at javassist.Loader.findClass(Loader.java:340)
... 15 more
Мы используем Maven для создания нашего проекта, и мы включили HTTP-клиент 4.1 (потому что мы зависим от HTTP-мим 4.1 из библиотеки Apache ).
Поскольку Robolectric jar по умолчанию включает в себя httpclient 4.0.3, мы не можем понять, почему он не может найти классы http. Мы предполагаем, что имеет что-то делать с AndroidTranslator пытается изменить байткод (для быть совместимы с Dalvik JVM?)
Если кто-то может пролить некоторый свет на этот вопрос, мы будем очень благодарны .
отсутствующих зависимостей, что баночка Robolectic положиться. Попробуйте загрузить Robolectric-all.jar или Robolectric-withDependencies.jar – Blundell