JUnit UnsatisfiedLinkError:android.util.Log.isLoggable(Ljava / lang / String;

时间:2015-03-12 15:49:32

标签: java android junit apache-httpclient-4.x

当我在使用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)

3 个答案:

答案 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。

这就是全部!希望你喜欢!