モッキートの「@generatemocks」と `@generatenicemocks`アノテーションは、DARTおよびフラッターアプリケーションでのユニットテスト用のモッククラスを生成するために使用されます。両方の注釈は同じ主要な目的を果たしますが、整理されていないメソッド呼び出しを処理する際の動作は大きく異なります。
@generatemocks
- 整理されていないメソッドの動作:「@generatemocks」で生成されたモックオブジェクトでメソッドが呼び出され、そのメソッドのスタブは定義されていない場合、モキトは例外をスローします。この動作により、テスト中に呼び出されると予想されるすべての方法のスタブを明示的に定義し、テストセットアップで潜在的な監視をキャッチするのに役立ちます。
- 使用:この注釈は、通常、モックの動作を厳密に制御する必要がある場合に使用され、予期しないメソッド呼び出しがすぐにエラーとしてフラグが付けられるようにします。
- 非推奨のステータス:「@GenerateMocks」は、その厳格な動作のために「@generatenicemocks」と比較してあまり推奨されていないと見なされます。
@generatenicemocks
- 整理されていない方法の動作:対照的に、「@generatenicemocks」で生成された模擬は、解決されていないメソッドが呼び出されたときにメソッドのリターンタイプのデフォルトの法的価値を返します。このデフォルト値は、テストロジックでの使用を目的としていませんが、nullまたは欠損値によるランタイムエラーを防ぐのに役立ちます。
- 使用:この注釈は、可能なすべてのメソッド呼び出しをスタブする必要性を減らすことにより、テストライティングを簡素化するため、ほとんどのユースケースに推奨されます。忘れられたスタブのために障害を回避することにより、テストをより堅牢にします。
- 追加の機能: `@GenerateniceMocks`では、引数リストに「mockspec」のみが許可されているため、生成されたモッククラスのカスタマイズがより柔軟になります。たとえば、「mockspec」の「as」パラメーターを使用して、模擬クラスのカスタム名を指定できます。
###キーの違い
1。解決されていない方法の処理:最も重要な違いは、各注釈が明示的なスタブなしでメソッド呼び出しを処理する方法です。 `@generatemocks`は例外をスローし、`@generatenicemocks`はデフォルト値を返します。
2。コードのシンプルさと堅牢性: `@generatenicemocks`は、一般に、徹底的なスタブの必要性を減らすことにより、よりシンプルで堅牢なテストコードにつながります。
3。カスタマイズ: `@GenerateniceMocks`は、「mockspec」を介してカスタマイズオプションをさらに提供し、カスタムモッククラス名やその他の高度な構成を可能にします。
要約すると、「@generatenicemocks」は一般に、テストコードを簡素化し、スタブされていないメソッドによるエラーを減らす能力に好まれますが、「@generatemocks」は、mockの動作に対する明示的な制御が必要な特定のシナリオで役立つより厳しいアプローチを提供します[1] [4] [11]。
引用:[1] https://www.amaysim.technology/blog/flutter-test-mockito-generatemocks-vs-generatenicemocks
[2] https://www.reddit.com/r/golang/comments/ua0hps/generated_vs_handwritten_mocks/
[3] https://blog.logrocket.com/unit-testing-flutter-code-mockito/
[4] https://pub.dev/documentation/mockito/latest/annotations/generatenicemocks-class.html
[5] https://plugins.jetbrains.com/plugin/23513-generate-flutter-mocks
[6] https://stackoverflow.com/questions/72390220/flutter-generatemocks-is-not-generated-class
[7] https://github.com/dart-lang/mockito/blob/master/null_safety_readme.md
[8] https://github.com/dart-lang/mockito/issues/367
[9] https://github.com/dart-lang/mockito/issues/422
[10] https://stackoverflow.com/questions/74406977/the-generatemocks-annotation-contains-a-class-which-appears-to-leady-mocked
[11] https://pub.dev/packages/mockito