Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Apa perbedaan antara @generatemocks dan @generatenicemocks


Apa perbedaan antara @generatemocks dan @generatenicemocks


`@GenerAteMocks` dan`@@generatenicemocks` anotasi dalam mockito digunakan untuk menghasilkan kelas tiruan untuk pengujian unit di aplikasi DART dan flutter. Sementara kedua anotasi memiliki tujuan utama yang sama, mereka berbeda secara signifikan dalam perilaku mereka ketika menangani panggilan metode yang tidak tersubbuli.

@generatemocks

- Perilaku untuk Metode yang Tidak Tersubsuk: Ketika suatu metode dipanggil pada objek tiruan yang dihasilkan dengan `@generatemocks` dan tidak ada rintisan yang telah ditentukan untuk metode itu, Mockito akan melempar pengecualian. Perilaku ini memastikan bahwa Anda secara eksplisit mendefinisikan stub untuk semua metode yang diharapkan dipanggil selama tes, membantu menangkap potensi pengawasan dalam pengaturan tes.

- Penggunaan: Anotasi ini biasanya digunakan ketika Anda ingin kontrol ketat atas perilaku mengolok -olok Anda, memastikan bahwa panggilan metode yang tidak terduga segera ditandai sebagai kesalahan.

- Status Deprecation: `@GenerAteMocks` dianggap kurang direkomendasikan dibandingkan dengan`@generateNeCeMocks` karena perilakunya yang ketat, yang dapat menyebabkan lebih banyak kode uji verbose jika tidak dikelola dengan hati -hati.

@generateNicemocks

- Perilaku untuk Metode yang Tidak Tersubsurasi: Sebaliknya, tiruan yang dihasilkan dengan `@generateNeCeMocks` akan mengembalikan nilai hukum default untuk tipe pengembalian metode ketika metode yang tidak ditukarkan dipanggil. Nilai default ini tidak dimaksudkan untuk digunakan dalam logika uji tetapi berfungsi untuk mencegah kesalahan runtime karena nilai nol atau yang hilang.

- Penggunaan: Anotasi ini direkomendasikan untuk sebagian besar kasus penggunaan karena menyederhanakan penulisan tes dengan mengurangi kebutuhan untuk mematikan setiap panggilan metode yang mungkin. Itu membuat tes lebih kuat dengan menghindari kegagalan karena stub yang terlupakan.

- Fitur tambahan: `@GenerAteTeniceMocks` hanya memungkinkan` mockspec dalam daftar argumennya, memberikan lebih banyak fleksibilitas dalam menyesuaikan kelas tiruan yang dihasilkan. Misalnya, Anda dapat menentukan nama khusus untuk kelas mock menggunakan parameter `as` di` mockspec`.

Perbedaan utama

1. Penanganan metode yang tidak tersubbing: Perbedaan yang paling signifikan adalah bagaimana setiap anotasi menangani metode panggilan tanpa stub eksplisit. `@GenerAteMocks` melempar pengecualian, sementara`@generateNiceMocks` mengembalikan nilai default.

2. Kode Kesederhanaan dan Kekokohan: `@GenerateNicemocks` umumnya mengarah pada kode uji yang lebih sederhana dan lebih kuat dengan mengurangi kebutuhan untuk menanggulnya.

3. Kustomisasi: `@GenerAteTeniceMocks` menawarkan lebih banyak opsi penyesuaian melalui` mockspec`, memungkinkan untuk nama kelas tiruan khusus dan konfigurasi canggih lainnya.

Singkatnya, `@generateNeCeMocks` umumnya lebih disukai karena kemampuannya untuk menyederhanakan kode uji dan mengurangi kesalahan karena metode yang tidak subtubbed, sementara`@generatemocks` memberikan pendekatan yang lebih ketat yang mungkin berguna dalam skenario spesifik di mana kontrol eksplisit atas perilaku tiruan diperlukan [1] [4] [11].

Kutipan:
[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-fcrutter-code-mockito/
[4] https://pub.dev/documentation/mockito/latest/annotations/generatenicemocks-class.html
[5] https://plugins.jetbrains.com/plugin/23513-generate-fcutter-mocks
[6] https://stackoverflow.com/questions/72390220/flutter-generatemocks-is-not-generated-mock-class
[7] https://github.com/dart-lo/mockito/blob/master/null_safety_readme.md
[8] https://github.com/dart-lo/mockito/issues/367
[9] https://github.com/dart-lo/mockito/issues/422
[10] https://stackoverflow.com/questions/74406977/the-generatemocks-annotation-contains-a-class-which-appears-to-already-be-mocked
[11] https://pub.dev/packages/mockito