gpt4 book ai didi

java - Apache DefaultHttpClient 调用结果为 "java.lang.RuntimeException: Stub!"

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:39 25 4
gpt4 key购买 nike

我正在涉足 Android 开发。我有一个将与 RESTful 资源交互的项目,我正在尝试弄清楚如何通过 HTTP 执行带有参数的基本 GET。从我读到的所有内容来看,共识似乎是支持 HTTPClient 而不是 HttpURLConnection。

我编写了一个包装类,其中包含一个负责实例化关键对象以使用 HTTPClient 发出请求的方法:

public String get() {  
String responseString = null;

HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet();
try {
get.setURI(new URI(this.baseURL()));
} catch (URISyntaxException e1) {
e1.printStackTrace();
}

HttpResponse response;

try {
response = client.execute(get);
responseString = readResponse(response.getEntity());

if(response != null) {
System.out.println(responseString);
}
} catch(ClientProtocolException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}

return responseString;

HttpClient client = new DefaultHttpClient(); 行抛出以下异常:

java.lang.RuntimeException: Stub!
at org.apache.http.impl.client.AbstractHttpClient.<init>(AbstractHttpClient.java:5)
at org.apache.http.impl.client.DefaultHttpClient.<init>(DefaultHttpClient.java:7)
at org.rcindustries.appmap.RestClient.get(RestClient.java:54)
at org.rcindustries.appmap.test.functional.RestClientTest.shouldReturnSomeJSon(RestClientTest.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

我见过的每个 HttpClient 示例都使用类似的结构来执行 GET 和 POST。与 Android SDK bundle 在一起的 Apache Commons 库与标准库有明显不同吗?

最佳答案

对于任何可能感兴趣的人,我遇到了一个类似的问题 - 尽管我得到的不是 HttpClient,而是 DateUtils 的 stub 错误。

Stephen 似乎是绝对正确的 - 作为 Android 平台一部分的类需要启动并运行模拟器:http://simpleprogrammer.com/2010/07/27/the-best-way-to-unit-test-in-android/

以上链接的快速总结:

As a matter of fact, all the methods are stubbed out to throw an exception with the message “Stub!” when you call them. How cute.

The real android.jar implementations live on the emulator, or your real Android device.

因此,你可以单元测试...

  • 在模拟器上 - 获得完整的 Android 平台、“真正的”android 环境等(但没有通用 Java 单元测试工具的功能 - 例如 JMock)

  • 使用 JVM - 速度更快,可以使用 JMock 等单元测试助手,但是您无法测试依赖于 Android 平台的任何东西。

关于java - Apache DefaultHttpClient 调用结果为 "java.lang.RuntimeException: Stub!",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3382499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com