Как выполнить модульное тестирование кода, который зависит от стороннего пакета во флаттере? - PullRequest
1 голос
/ 20 апреля 2020

Как проверить код во флаттере, который зависит от плагина path_provider?

При выполнении тестов для кода, который зависит от плагина path_provider, я получаю следующую ошибку:

  MissingPluginException(No implementation found for method getStorageDirectory on channel plugins.flutter.io/path_provider)
  package:flutter/src/services/platform_channel.dart 319:7                         MethodChannel.invokeMethod
  ===== asynchronous gap ===========================
  dart:async                                                                       _asyncErrorWrapperHelper
  package: mypackage someClass.save
  unit_tests/converter_test.dart 19:22   

                                 main.<fn>

1 Ответ

3 голосов
/ 20 апреля 2020

Вам нужно смоделировать все методы, вызываемые тестируемым кодом, если он их вызывает, и зависеть от их результатов

, в вашем случае вы должны смоделировать метод getStorageDirectory(), чтобы он возвращал какой-то результат, удовлетворяющий ваш тест

для получения дополнительной информации о том, как имитировать проверку это и это

Краткий пример того, как имитировать:

class MyRepo{
  int myMethod(){
    return 0;
  }
}

class MockRepo extends Mock implements MyRepo{}

void main(){
  MockRepo mockRepo = MockRepo();
  test('should test some behaviour',
          () async {
            // arrange
            when(mockRepo.myMethod()).thenAnswer(1);//in the test when myMethod is called it will return 1 and not 0
            // act
            //here put some method that will invoke myMethod on the MockRepo and not on the real repo
            // assert
            verify(mockRepo.myMethod());//verify that myMethod was called
          },
        );
}
...