当我在使用apachehttp-client的Android应用程序上运行JUnit测试时,我收到以下错误。该应用程序在我的测试设备和模拟器上成功运行。登录JUnit测试也会通过,但只要应用程序尝试使用apachehttp-client从服务器读取数据,其余的JUnit测试就会失败。
httpClient.execute
上的测试似乎失败了try {
URL businessPartnersResource = new URL(
session.getServer().getUrl(), "BusinessPartners");
HttpGet request = new HttpGet(businessPartnersResource.toURI());
session.attachToRequest(request);
HttpClient httpClient = HttpClientFactory.getClient();
HttpResponse response = httpClient.execute(request);
int status = response.getStatusLine().getStatusCode();
switch (status) {
case HttpsURLConnection.HTTP_OK: {
这里是失败追踪
java.lang.UnsatisfiedLinkError: android.util.Log.isLoggable(Ljava/lang/String;I)Z
at android.util.Log.isLoggable(Native Method)
at org.apache.http.client.protocol.RequestClientConnControl.process(RequestClientConnControl.java:76)
at org.apache.http.protocol.BasicHttpProcessor.process(BasicHttpProcessor.java:251)
at org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:168)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:458)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
答案 0 :(得分:6)
令人沮丧,但你必须使用RobolectricTestRunner而不是标准的JUnit。
isLoggable是一种本机方法,因此在运行时不可用。
如果您使用Volley或apachehttp-client,最大的问题是isLoggable被称为字段实例化,例如:
private static final DEBUG = Log.isLoggable(..);
由于此方法在运行时库中根本无法使用,因此完全会让事情变得混乱,因此即使AndroidTestCase
也无法保存。
幸运的是,Robolectric完美地处理了它。
编辑2017年4月4日
JUnit 5现已上市,我还没有测试过这个测试人员。
答案 1 :(得分:1)
我遇到了同样的问题,请尝试在测试类中扩展AndroidTestCase。该错误是由于只能在android运行时(Device \ Emulator)
上找到的类答案 2 :(得分:-3)
在Android项目上运行JUnit测试。
在android中运行junit测试的唯一区别是你将调用Run As> Android JUnit Test,而不仅仅是您在java中习惯的JUnit Test。
这就是全部!希望你喜欢!