Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Was sind die Unterschiede zwischen @Generatemocks und @Generatenicemocks


Was sind die Unterschiede zwischen @Generatemocks und @Generatenicemocks


Die Anmerkungen von `@Generatemocks` und`@Generatenicemocks 'in Mockito werden verwendet, um Scheinklassen für Unit -Tests in Dart- und Flutter -Anwendungen zu generieren. Während beide Anmerkungen den gleichen Hauptzweck erfüllen, unterscheiden sie sich bei der Behandlung von nicht stubbed Methodenaufrufen erheblich in ihrem Verhalten.

@Generatemocks

- Verhalten für nicht ununterbrochene Methoden: Wenn eine Methode auf ein mit "@@Generatemocks" erzeugter Mock -Objekt aufgerufen wird und für diese Methode kein Stub definiert wurde, wird Mockito eine Ausnahme auswerfen. Dieses Verhalten stellt sicher, dass Sie Stubs für alle Methoden ausdrücklich definieren, von denen erwartet wird, dass sie während eines Tests aufgerufen werden, und dazu beitragen, potenzielle Versehen im Test -Setup zu fangen.

- Verwendung: Diese Annotation wird normalerweise verwendet, wenn Sie die strenge Kontrolle über das Verhalten Ihrer Mocke wünschen, um sicherzustellen, dass unerwartete Methodenaufrufe sofort als Fehler gekennzeichnet werden.

- Abschaltstatus: `@Generatemocks` wird aufgrund seines strengen Verhaltens als weniger empfohlen im Vergleich zu"@GenerateInicemocks "als weniger empfohlen angesehen, was zu mehr ausführlicheren Testcode führen kann, wenn sie nicht sorgfältig verwaltet werden.

@Generatenicemocks

- Verhalten für nicht ununterbrochene Methoden: Im Gegensatz dazu gibt Mocks, die mit "@GenerateInicemocks" generiert werden, einen Standardwert für den Rückgabetyp der Methode zurück, wenn eine nicht aufgeführte Methode aufgerufen wird. Dieser Standardwert ist nicht für die Verwendung in der Testlogik bestimmt, dient jedoch dazu, Laufzeitfehler aufgrund von Null- oder fehlenden Werten zu verhindern.

- Nutzung: Diese Annotation wird für die meisten Anwendungsfälle empfohlen, da sie das Schreiben von Tests vereinfacht, indem die Notwendigkeit reduziert wird, jeden möglichen Methodenaufruf zu beachten. Es macht Tests robuster, indem es Fehler aufgrund vergessener Stubs vermeidet.

- Zusätzliche Funktionen: `@GenerateInicemocks` erlaubt nur" Mockspec "in seiner Argumentliste, was mehr Flexibilität beim Anpassen der generierten Scheinklassen bietet. Sie können beispielsweise einen benutzerdefinierten Namen für die Mock -Klasse angeben, indem Sie den Parameter "als" in `mockspec` verwenden.

Schlüsselunterschiede

1. Handhabung von nicht festgelegten Methoden: Der wichtigste Unterschied besteht darin, wie jede Annotation mit Methoden ohne explizite Stubs aufgerufen wird. `@Generatemocks` löst eine Ausnahme aus, während`@GenerateInicemocks` einen Standardwert zurückgibt.

2. Codes Simpleity and Robustness: `@GenerateNicemocks 'führt im Allgemeinen zu einem einfacheren und robusteren Testcode, indem die Notwendigkeit von erschöpfender Stubbing reduziert wird.

3. Anpassung: `@generatenicemocks 'bietet mehr Anpassungsoptionen über` mockspec`, sodass benutzerdefinierte Namensklassennamen und andere erweiterte Konfigurationen ermöglichen.

Zusammenfassend wird "@GenerateInicemocks" im Allgemeinen für seine Fähigkeit bevorzugt, den Testcode zu vereinfachen und Fehler aufgrund von nicht gestubten Methoden zu reduzieren, während "@Generatemocks" einen strengeren Ansatz liefert, der in bestimmten Szenarien nützlich sein kann, in denen eine explizite Kontrolle über das Verhalten des Scheinverhaltens erforderlich ist [1] [4] [11].

Zitate:
[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-floch-mocks
[6] https://stackoverflow.com/questions/72390220/flutter-generatemocks-is-not-generated-mock-classe
[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-notation-contains-a-class-whos-aprears-to-already-be-mocked
[11] https://pub.dev/packages/mockito