2021-11-28に更新

FlutterのPackageInfoの処理を含むtestを実行する

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を指定しているせいで影響が出て別のテストでエラーが出る可能性があるのかもしれない。新規パッケージプロジェクトではそちらの対処っぽいものも入っていた。上記のソースコードや他の解説記事などでも対処しているものが見つからなかったのでそれも下記に書いておく。

全体としては下記のコードのような感じ。

ツイッターでシェア
みんなに共有、忘れないようにメモ

だら@Crieit開発者

Crieitの開発者です。 Webエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, React, Flutter, Vue.js, Node, RoR 趣味:Elixir, Phoenix, Nuxt, Express, GCP, AWS等色々 PHPフレームワークちいたんの作者

コメント