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

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

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

运行对 Android 个项目进行 JUnit 测试。

在 android 中 运行 junit test 的唯一区别是您将调用 运行 As > Android JUnit Test 而不是像您一样只是 JUnit Test习惯于 java.

就这些!希望你喜欢!

我遇到了同样的问题,请尝试在您的测试中扩展 AndroidTestCase class。该错误是由于 classes 只能在 android 运行时 (Device\Emulator)

上找到

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

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

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

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

考虑到此方法在运行时在那些 中根本不可用,这完全搞砸了,所以即使 AndroidTestCase 也无法拯救你。

幸运的是,Robolectric 处理得很好。

编辑 2017 年 4 月 4 日

JUnit 5 现已可用,我尚未使用此测试运行器进行测试。

对我来说,它发生在 运行 对 kotest 进行特定测试时。我不得不 运行 一次完成所有测试,而不是一项一项地进行。