Mockito中的“@GenerateMocks”和`@GenerateNiceMocks'注释用于生成DART和FLUTTER应用程序中的单元测试的模拟类。尽管两种注释都具有相同的主要目的,但处理未纳入方法调用时,它们的行为有很大差异。
@generatemocks
- 未纳入方法的行为:当对使用`@generatemocks'生成的模拟对象调用方法,并且未针对该方法定义了存根时,Mockito将引发异常。这种行为可确保您明确定义所有预期在测试期间被调用的方法,从而有助于在测试设置中吸引潜在的监督。
- 用法:当您需要严格控制模拟行为时,通常会使用此注释,以确保立即将任何意外方法调用标记为错误。
- 弃用状态:`@generatemocks`被认为与@@generatenicemocks'相比,由于其严格的行为而被认为是不推荐的,如果不仔细管理,这可能会导致更多的冗长测试代码。
@generatenicemocks
- 未纳入方法的行为:相反,当调用未插入方法时,使用`@generateNiceMocks'生成的模拟将返回该方法的返回类型的默认,法律值。此默认值不适用于测试逻辑,而是用于防止由于零值或缺失值而导致的运行时错误。
- 用法:建议大多数用例使用此注释,因为它通过减少对所有可能的方法调用的需求来简化测试写作。它通过避免由于被遗忘的存根而避免失败,从而使测试更加健壮。
- 附加功能:`@GenerateNiceMocks`仅允许在其参数列表中``MockSpec's'',在自定义生成的模拟类时提供了更大的灵活性。例如,您可以使用
模拟)中的
sage)指定模拟类别的自定义名称。
###密钥差异
1。处理未添加的方法:最重要的差异是每个注释如何处理无明确存根的方法调用。 `@generatemocks`引发异常,而@@generateNiceMocks`返回默认值。
2。代码简单性和鲁棒性:`@GenerateNiceMocks'通常通过减少对详尽的固执的需求而导致更简单,更健壮的测试代码。
3.自定义:`@@generateNiceMocks`通过``模拟式''提供了更多的自定义选项,从而允许自定义模拟类名称和其他高级配置。
总而言之,`@@generateNiceMocks'通常首选其简化测试代码并因未添加方法而减少错误的能力,而`@@generatemocks`提供了一种更严格的方法,在需要对模拟行为的明确控制的情况下,可能在特定方案中有用[1] [1] [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-not-generated-Mock-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-clastains-a-class-wher-wher-a-class-wher-wher-wher-apperears-to-to-ready-ready-be be Mocked
[11] https://pub.dev/packages/mockito