2012-08-03 143 views
2

我试图使用Robolectric测试框架的HTTP layer测试HTTP调用。Robolectric HTTP测试在NoSuchMethodError上失败:org.apache.http.impl.client.DefaultRequestDirector

我的测试类已经使用RunWith(RobolectricTestRunner.class)进行了注释。下面是一个示例HTTP测试案例:

java.lang.NoSuchMethodError: org.apache.http.impl.client.DefaultRequestDirector.<init>(Lorg/apache/commons/logging/Log;Lorg/apache/http/protocol/HttpRequestExecutor;Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/ConnectionReuseStrategy;Lorg/apache/http/conn/ConnectionKeepAliveStrategy;Lorg/apache/http/conn/routing/HttpRoutePlanner;Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/client/HttpRequestRetryHandler;Lorg/apache/http/client/RedirectHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/UserTokenHandler;Lorg/apache/http/params/HttpParams;)V 
at org.apache.http.impl.client.AbstractHttpClient.createClientRequestDirector(AbstractHttpClient.java:660) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:625) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554) 

任何想法可能会导致:

@Test 
public void testHttpGet() { 
    Robolectric.addPendingHttpResponse(200, "All your requests are belong to Robolectric"); 
    String response = ConnectionUtils.sendRequest(); 
    assertThat(response, equalTo("All your requests are belong to Robolectric")); 
} 

测试失败和JUnit故障跟踪报告以下DefaultRequestDirector异常(源自sendRequest将()调用) Apache类抛出异常?

使用当前最新的库,robolectric-1.2-20120730.165026-113-jar-with-dependencies.jar。

回答

5

发现了Robolectric谷歌组答案:https://groups.google.com/forum/#!msg/robolectric/jWwWjQ23wHI/X9b_ZdDMJg0J

  1. 右键单击Robolectric Java测试项目>属性> Java构建路径>订单和出口。
  2. 将robolectric jar移动到库列表的顶部。
  3. 查找并移除cached-robolectric-classes.jar。如果您遵循Robolectric的Eclipse安装说明,该文件将位于[您的主Android项目]/tmp下。
  4. 重新运行JUnit并重新开始工作。