Тестирование кода Flutter, который использует плагин и канал платформы - PullRequest
0 голосов
/ 26 августа 2018

У меня есть плагин флаттера, который использует канал платформы для выполнения собственной работы.

Как правильно написать тесты для моего приложения, для которого требуется этот плагин?

Хороши только юнит-тестыдля чистых дротиков.Я не верю, что тестирование виджетов сможет проверять вещи, которые используют канал платформы для нативного.Итак, это оставляет интеграционное тестирование.

Насколько я понимаю, интеграционное тестирование запустит ваше основное приложение, и вы сможете управлять им во всем приложении и тестировать его.

В моем случае я хочупротестируйте только код, который использует плагин (который использует канал платформы для нативного содержимого).

Также важно то, что значения возвращаются из канала платформы, поэтому важно вызывать нативную сторону, используяреальный канал платформы, а не фиктивный.

Возможно ли это?Могу ли я сказать тестеру интеграции открыть фиктивную версию моего приложения, вроде встроенного тестера виджетов?

1 Ответ

0 голосов
/ 01 октября 2018

Кажется, короткий ответ на ваш вопрос - нет.Драйвер флаттера (интеграционное тестирование) может взаимодействовать только с пользовательским интерфейсом AFAIK.Он не может перехватывать вызовы плагинов.Он используется для тестирования всего приложения из пользовательского интерфейса.

Однако возможно перехватывать вызовы плагинов в модульных и виджетных тестах.Это позволяет отслеживать звонки на плагин и высмеивать ответ.Таким образом, вы можете проверить код дротика вашего плагина и / или виджет, который использует плагин.Тестирование собственного кода будет включать в себя написание собственных тестов.

Ниже приведен пример перехвата вызовов плагина для тестирования:

MethodChannel('audio_recorder')
    .setMockMethodCallHandler((MethodCall methodCall) async {
  log.add(methodCall);
  switch (methodCall.method) {
    case 'start':
      isRecording = true;
      return null;
    case 'stop':
      isRecording = false;
      return {
        'duration': duration,
        'path': path,
        'audioOutputFormat': extension,
      };
    case 'isRecording':
      return isRecording;
    case 'hasPermissions':
      return true;
    default:
      return null;
  }
});

Полный пример см. здесь

...