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

Pip*_*Pip 7 java junit android 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: {
Run Code Online (Sandbox Code Playgroud)

这是失败追踪

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)
Run Code Online (Sandbox Code Playgroud)

Vic*_*cVu 6

令人沮丧,但你必须使用RobolectricTestRunner而不是标准的JUnit.

isLoggable是一种本机方法,因此在运行时不可用.

如果您使用Volley或apachehttp-client,最大的问题是isLoggable被称为字段实例化,例如:

private static final DEBUG = Log.isLoggable(..);

鉴于此方法在运行时根本无法在这些库中提供,因此这完全会让事情变得混乱,所以即使是AndroidTestCase无法保存的也是如此.

幸运的是,Robolectric完美地处理它.

编辑2017年4月4日

JUnit 5现已上市,我还没有测试过这个测试人员.