1

我们正在尝试将 robolectric 集成到我们的项目中,但遇到了一些意想不到的问题。

当我们不使用 Robolectric 时,该项目编译得很好。但是,在使用 Robolectric 运行简单测试时,我们在 org.apache.http 包中遇到了 NoClassDefFoundError。

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-client 4.1(因为我们依赖于 apache 库中的 http-mime 4.1)。

由于 Robolectric jar 默认包含 httpclient 4.0.3,我们无法理解为什么它找不到 http 类。我们假设它与 AndroidTranslator 试图修改字节码有关(与 dalvik jvm 兼容?)

如果有人能对此事有所了解,我们将不胜感激。

4

1 回答 1

0

我遇到了同样的问题,我通过添加以下排除来修复它

    <dependency>
        <groupId>com.pivotallabs</groupId>
        <artifactId>robolectric</artifactId>
        <version>1.0-RC1</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
            </exclusion>
        </exclusions>
        <scope>test</scope>
    </dependency>
于 2011-06-01T14:06:29.097 回答