FlutterでUnit testを書く際に、MethodChannelを使用しているとこのようなエラーがでます。
package:flutter/src/services/platform_channel.dart 308:7 MethodChannel._invokeMethod
MissingPluginException(No implementation found for method updateBadgeCount on channel [author/package_name])
その場合は、MethodChannel自体をモックしてあげる必要があります。
やり方は簡単で、 TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler
を呼び出してあげればよいです。
特になにもしなければnullで問題ないのですが、適宜変更してください。
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
.setMockMethodCallHandler(const MethodChannel([author/package_name]),
(call) async {
return null;
});
これをsetUp()
で呼べば、テスト時にで初期化してくれます。
void main() {
setUp(() async {
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
.setMockMethodCallHandler(const MethodChannel([author/package_name]),
(call) async {
return null;
});
});
test('mock test', () async {
...
});
}
Firebase
ちなみにFirebaseの場合は用意されたものがあります。
TestFirebaseCoreHostApi.setup(MockFirebaseApp());