FlutterのtestでPackageInfoの実行を含むコードのtestを実行するとエラーになる。
Null check operator used on a null value
package:flutter/src/services/platform_channel.dart 121:86 MethodChannel.binaryMessenger
package:flutter/src/services/platform_channel.dart 146:36 MethodChannel._invokeMethod
package:flutter/src/services/platform_channel.dart 329:12 MethodChannel.invokeMethod
package:flutter/src/services/platform_channel.dart 356:49 MethodChannel.invokeMapMethod
package:package_info/package_info.dart 42:26 PackageInfo.fromPlatform
恐らくテストなのでネイティブ処理が無いためだろう。MethodChannelでネイティブの処理を呼ぼうとして失敗している。
ということで新規パッケージプロジェクトを作った際に元々入っていたMethodChannelのテストを参考にして、PackageInfoの実行をMockで実行する。具体的にはsetMockMethodCallHandlerを実行する。
下記を参考にしてる。もしくはPackageInfoのソースコードを見ても分かると思う。(ただこれだけだと他のテストに影響がでるかもとのことのため対処は後述)
https://stackoverflow.com/questions/54162467/how-to-test-a-method-that-uses-package-info-in-flutter
ensureInitializedを入れないと下記のようなエラーも出るのでちゃんと入れる。
Null check operator used on a null value
package:flutter_test/src/deprecated.dart 95:47 TestMethodChannelExtension.setMockMethodCallHandler
ちなみにsetMockMethodCallHandlerを指定しているせいで影響が出て別のテストでエラーが出る可能性があるのかもしれない。新規パッケージプロジェクトではそちらの対処っぽいものも入っていた。上記のソースコードや他の解説記事などでも対処しているものが見つからなかったのでそれも下記に書いておく。
全体としては下記のコードのような感じ。
コメント