Тестирование основного клиента Google IoT для Android - PullRequest
0 голосов
/ 23 октября 2018

Проект Android Things со следующим модульным тестом завершается неудачей:

import com.google.android.things.iotcore.IotCoreClient;
import org.junit.Test;

public class ExampleUnitTest {

    @Test
    public void clientTest() {
        new IotCoreClient.Builder();
    }
}

Зависимости build.gradle:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    compileOnly 'com.google.android.things:androidthings:1.0'
    implementation 'com.google.android.things:cloud-iot-core:1.0.0'
    testImplementation 'com.google.android.things:cloud-iot-core:1.0.0'
}

Вывод ошибки:

java.lang.VerifyError: Expecting a stackmap frame at branch target 36
Exception Details:
  Location:
    com/google/android/things/iotcore/IotCoreClient$Builder.build()Lcom/google/android/things/iotcore/IotCoreClient; @22: ifnonnull
  Reason:
    Expected stackmap frame at this location.
  Bytecode:
    0000000: 2ab4 0013 1203 b800 1e2a b400 1412 06b8
    0000010: 001e 2ab4 0015 c700 0e2a bb00 0959 b700
    0000020: 1ab5 0015 2ab4 0017 c600 112a b400 16c7
    0000030: 000a 2ab8 001f b500 162a b400 19c6 0011
    0000040: 2ab4 0018 c700 0a2a b800 1fb5 0018 bb00
    0000050: 1059 2ab4 0013 b600 1b2a b400 13b6 001c
    0000060: bb00 1259 b700 23b7 0022 4ca7 000d 4cbb
    0000070: 000e 592b b700 20bf bb00 0b59 2ab4 0013
    0000080: 2ab4 0014 2b2a b400 152a b400 182a b400
    0000090: 192a b400 162a b400 1703 b700 1db0     
  Exception Handler Table:
    bci [78, 107] => handler: 110

Iможет отлично создавать экземпляр Builder внутри Activity, но хотел бы написать и тесты для него.Есть ли способ проверить соединение с IoT Core?

Возможно, это проблема зависимости, но у меня нет идей.

1 Ответ

0 голосов
/ 02 ноября 2018

Библиотека внутренне опирается на клиента Paho MQTT, который транзитивно не предоставляется вызывающим абонентам как часть своего открытого API (то есть классы не видны через библиотеку).Ошибки, которые вы видите, происходят потому, что IotCoreClient.Builder пытается создать экземпляр внутреннего клиентского класса MQTT, который тест не может увидеть.Вы можете найти исходный код для клиента Cloud IoT Core на GitHub .

Помимо этой конкретной ошибки, я бы рекомендовал не создавать такой тест.Это создает две проблемы, которые вы обычно хотите избежать при тестировании:

  1. Как написано, это похоже на тест, чтобы проверить, работает ли клиент Cloud IoT (другими словами, является ли библиотека Googleкод работает, а не работает ли ваш код).Модульные тесты должны быть сосредоточены на проверке поведения вашего кода и заглушении деталей реализации любых зависимостей.

  2. Модульный тест, который соединяется полностью с Cloud IoT, не герметичен, и поэтомутрудно обеспечить повторяемые результаты.Режимы сбоев, начиная от плохого подключения к Интернету и заканчивая непредвиденными данными на устройстве, могут привести к некорректному завершению теста.В идеале вы должны предоставить фиктивный или заглушенный интерфейс для теста, где вы можете предоставить детерминированные результаты для реального тестируемого кода.

...