Mockito의`@generatemocks` 및`@generateniceMocks '주석은 DART 및 Flutter 응용 프로그램에서 단위 테스트를위한 모의 클래스를 생성하는 데 사용됩니다. 두 주석은 동일한 주요 목적으로 사용되지만, 비공개 메소드 호출을 처리 할 때 동작이 크게 다릅니다.
@generatemocks
- 비공개 방법에 대한 동작 :`@generatemocks`로 생성 된 모의 객체에서 메소드가 호출되고 해당 방법에 대한 스터브가 정의되지 않은 경우, Mockito는 예외를 던집니다. 이 동작은 테스트 중에 호출 될 것으로 예상되는 모든 방법에 대해 스텁을 명시 적으로 정의하여 테스트 설정에서 잠재적 감독을 포착 할 수 있도록합니다.
- 사용법 :이 주석은 일반적으로 모의 동작을 엄격하게 제어 할 때 사용되므로 예상치 못한 메소드 호출이 즉시 오류로 표시되도록합니다.
- 감가 상각 상태 :`@generatemocks`는 엄격한 동작으로 인해`@generatenicemocks`에 비해 권장이 적은 것으로 간주되며, 이는 신중하게 관리하지 않으면 더 많은 장황 테스트 코드로 이어질 수 있습니다.
@generateNiceMocks
- 비공개 방법에 대한 동작 : 대조적으로,`@generateniceMocks`로 생성 된 모의는 스튜브되지 않은 메소드가 호출 될 때 메소드의 반환 유형에 대한 기본값, 법적 값을 반환합니다. 이 기본값은 테스트 로직에서 사용하기위한 것이 아니라 NULL 또는 결 측값으로 인해 런타임 오류를 방지하는 역할을합니다.
- 사용법 :이 주석은 대부분의 사용 사례에 권장됩니다. 가능한 모든 메소드 호출을 처리 할 필요성을 줄임으로써 테스트 작성을 단순화하기 때문입니다. 잊혀진 스터브로 인한 고장을 피함으로써 테스트를보다 강력하게 만듭니다.
- 추가 기능 :`@generateniceMocks`는 'Mockspec'만이 인수 목록에서만 허용하여 생성 된 모의 클래스를 사용자 정의하는 데 더 많은 유연성을 제공합니다. 예를 들어,`mockspec`의 as '매개 변수를 사용하여 Mock 클래스의 사용자 정의 이름을 지정할 수 있습니다.
주요 차이점
1. 버드 튜브되지 않은 방법의 처리 : 가장 중요한 차이점은 각 주석이 명시적인 스터브없이 메소드 호출을 처리하는 방법입니다. `@generatemocks '는 예외를 던지고`@generatenicemocks`는 기본값을 반환합니다.
2. 코드 단순성 및 견고성 :`@generatenicemocks`는 일반적으로 철저한 스터 빙의 필요성을 줄임으로써 더 단순하고 강력한 테스트 코드로 이어집니다.
3. 사용자 정의 :`@generateniceMocks`는 'mockspec'을 통해 더 많은 사용자 정의 옵션을 제공하므로 사용자 정의 모의 클래스 이름 및 기타 고급 구성이 가능합니다.
요약하면,`@generateniceMocks`는 일반적으로 조작되지 않은 방법으로 인해 테스트 코드를 단순화하고 오류를 줄이는 능력에 대해 일반적으로 선호되는 반면,`@generatemocks '는 모의 동작에 대한 명시 적 제어가 필요한 특정 시나리오에서 유용 할 수있는 엄격한 접근법을 제공합니다 [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/generatenicemocksclass.html
[5] https://plugins.jetbrains.com/plugin/23513-generate-flutter-mocks
[6] https://stackoverflow.com/questions/72390220/flutter-generatemocks-is-not--generated-mock class
[7] https://github.com/dart/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--appears-lead-mocked
[11] https://pub.dev/packages/mockito