ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Mockito for Dart 3.0新特性详解:空安全支持与性能优化

Mockito for Dart 3.0新特性详解:空安全支持与性能优化 Mockito for Dart 3.0新特性详解空安全支持与性能优化【免费下载链接】mockitoMockito-inspired mock library for Dart项目地址: https://gitcode.com/gh_mirrors/moc/mockitoMockito for Dart 3.0作为一款受Mockito启发的模拟库为Dart开发者带来了诸多实用新特性其中空安全支持与性能优化是两大核心亮点。空安全Null Safety作为Dart 3.0的重要特性能有效避免空引用错误而Mockito对其的全面支持让开发者在编写测试代码时更加安心。空安全支持让测试代码更可靠 ️Dart的新空安全类型系统允许方法参数类型和返回类型为非可空。例如class HttpServer { Uri start(int port) { // ... } }在空安全类型系统下向start方法传递null或该方法返回null都是非法的这对Mockito的方法存根机制造成了影响。为此Mockito提供了两种解决方案来支持非可空类型的模拟类编写。解决方案1代码生成Mockito提供了一个“一刀切”的代码生成解决方案可用于为空安全的包生成任何类的模拟。要让Mockito生成模拟类需使用新的GenerateNiceMocks注解并导入生成的模拟库。首先在测试文件中进行如下操作导入mockito的注解库导入生成的模拟库用GenerateNiceMocks注解该导入将使用的类改为生成的模拟类import package:mockito/annotations.dart; import package:test/test.dart; import http_server.dart; GenerateNiceMocks([MockSpecHttpServer()]) import http_server_test.mocks.dart; void main() { test(test, () { var httpServer MockHttpServer(); // 可以存根start方法等操作 }); }然后需要在pubspec.yaml文件的dev_dependencies下添加对build_runner的依赖如build_runner: ^1.10.0。最后运行build_runner生成新库flutter pub run build_runner build # 或者 dart run build_runner buildbuild_runner将生成http_server_test.mocks.dart文件该文件路径直接取自发现GenerateNiceMocks的文件将.dart后缀改为.mocks.dart。解决方案2手动模拟实现虽然通常强烈建议使用上述方法生成模拟但在某些情况下手动模拟实现可能更合适。例如代码生成不是包的最佳选择或者只需要模拟一个大部分参数类型和返回类型都是可空的类。手动模拟实现的一般流程是对于每个具有非可空返回类型或具有非可空类型参数的公共方法包括getter、setter和运算符都需要重写在模拟类中用新声明重写方法对于每个非可空参数将其类型扩展为可空调用super.noSuchMethod传入包含所有传递给重写的值的Invocation对象如果返回类型是非可空的向super.noSuchMethod传递第二个参数即可以作为返回值的值例如对于HttpServer类class HttpServer { void start(int port) { ... } Uri get uri { ... } }在空安全之前实现模拟类很简单class MockHttpServer extends Mock implements HttpServer {}但在空安全下需要重写每个具有一个或多个非可空参数或具有非可空返回类型的方法。重写具有非可空参数类型的方法class MockHttpServer extends Mock implements HttpServer { override void start(int? port) super.noSuchMethod(Invocation.method(#start, [port])); }重写具有非可空返回类型的方法class MockHttpServer extends Mock implements HttpServer { override Uri get uri super.noSuchMethod( Invocation.getter(#uri), returnValue: Uri.http(example.org, /)); }性能优化提升测试执行效率 ⚡虽然目前在项目代码中未直接找到关于性能优化的具体实现细节但作为一款成熟的模拟库Mockito for Dart 3.0在性能方面必然有所考量和改进。通常模拟库的性能优化可能体现在以下几个方面减少不必要的计算和对象创建在模拟方法调用和存根处理过程中减少不必要的计算步骤和对象创建能够有效提升测试执行速度。例如优化参数匹配逻辑避免在匹配过程中进行过多复杂的操作。优化内部数据结构使用更高效的数据结构来存储和管理模拟方法的调用记录和存根信息加快查询和匹配速度。比如采用哈希表等数据结构提高方法调用查找的效率。延迟初始化和懒加载对于一些在测试中不一定会用到的模拟功能采用延迟初始化或懒加载的方式在真正需要时才进行初始化减少初始化阶段的资源消耗和时间成本。总结Mockito for Dart 3.0的空安全支持通过代码生成和手动模拟实现两种方式为开发者提供了可靠的非可空类型模拟解决方案让测试代码在空安全环境下更加健壮。同时虽然具体性能优化细节未在代码中明确体现但作为一款优秀的模拟库其在性能方面的改进无疑会提升测试执行效率为Dart开发者带来更好的测试体验。无论是新手还是有经验的开发者都能从这些新特性中受益更轻松地编写高质量的测试代码。要使用Mockito for Dart 3.0可通过以下命令克隆仓库git clone https://gitcode.com/gh_mirrors/moc/mockito【免费下载链接】mockitoMockito-inspired mock library for Dart项目地址: https://gitcode.com/gh_mirrors/moc/mockito创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表