Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Jaké jsou rozdíly mezi @generatemocks a @generateNeniceMocks


Jaké jsou rozdíly mezi @generatemocks a @generateNeniceMocks


Anotace `@generateMocks` a`@generateNeniceMocks v Mockito se používají ke generování falešných tříd pro testování jednotek v aplikacích DART a Flutter. Zatímco obě anotace slouží stejnému primárnímu účelu, při manipulaci se volání metody uvolní se výrazně liší.

@generateMocks

- Chování pro neomezené metody: Když je metoda vyvolána na falešný objekt generovaný s `@generateMocks` a pro tuto metodu nebyl definován žádný stub, Mockito vyvolá výjimku. Toto chování zajišťuje, že výslovně definujete paruby pro všechny metody, u nichž se očekává, že budou během testu vyvolány, což pomáhá zachytit potenciální dohled v nastavení testu.

- Použití: Tato anotace se obvykle používá, když chcete přísnou kontrolu nad chováním vašich falešných, a zajistí, že jakákoli neočekávaná volání metody jsou okamžitě označeny jako chyby.

- Stav odpisu: `@generateMocks` je považován za méně doporučený ve srovnání s`@GenerateNiceMocks` kvůli jeho přísnému chování, což může vést k výraznějšímu testovacímu kódu, pokud nebude spravováno pečlivě.

@generateNeniceMocks

- Chování pro neomezené metody: Naproti tomu zesměšňování generované s `@generateNeniceMocks` vrátí výchozí hodnotu, legální hodnota pro typ návratu metody, když je volána metoda uvolněná. Tato výchozí hodnota není určena pro použití v testovací logice, ale slouží k prevenci chyb runtime v důsledku nulových nebo chybějících hodnot.

- Použití: Tato anotace je doporučena pro většinu případů použití, protože zjednodušuje psaní testů snížením potřeby strhnout všechny možné volání metody. Díky tomu je testy robustnější tím, že se vyhýbáte selháním v důsledku zapomenutých pahýlů.

- Další funkce: `@GenerateNeniceMocks` umožňuje pouze„ Mockspec ve svém seznamu argumentů a poskytuje větší flexibilitu při přizpůsobování generovaných simulovaných tříd. Například můžete zadat vlastní jméno pro simulovanou třídu pomocí parametru `as` v` mockspec`.

Klíčové rozdíly

1. Manipulace s neomezenými metodami: Nejvýznamnějším rozdílem je, jak každá anotační zpracování volá metodu bez explicitních patek. `@GenerateMocks` vyvolá výjimku, zatímco`@generateNeniceMocks` vrací výchozí hodnotu.

2. Jednoduchost a robustnost kódu: `@generateNeniceMocks` obecně vede k jednoduššímu a robustnějšímu testovacímu kódu snížením potřeby vyčerpávajícího strništění.

3. Přizpůsobení: `@generateNeniceMocks` nabízí více možností přizpůsobení prostřednictvím` mockspec`, což umožňuje vlastní simulované názvy tříd a další pokročilé konfigurace.

Stručně řečeno, „@generateNeniceMocks“ je obecně preferováno pro jeho schopnost zjednodušit testovací kód a snižovat chyby v důsledku neomezených metod, zatímco „@generateMocks“ poskytuje přísnější přístup, který může být užitečný v konkrétních scénářích, kde je vyžadována explicitní kontrola nad falešným chováním [1] [4] [11].

Citace:
[1] https://www.amaysim.technology/blog/fluttertest-mockito-generateMocks-vs-generateNeniceMocks
[2] https://www.reddit.com/r/golang/comments/ua0hps/generated_vs_handwteritten_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-generované mock-třídy
[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-anotace-contains-a-třída-appears-to-already-be-e-mocked
[11] https://pub.dev/packages/mockito