如何为Flutter中的CustomHttpOverrides类添加单元测试及测试覆盖率?
为CustomHttpOverrides编写单元测试以满足覆盖率要求
要覆盖CustomHttpOverrides的所有代码路径,需测试两个核心点:构造方法的初始化逻辑和重写的createHttpClient方法的证书注入逻辑,确保自定义证书被正确配置到SecurityContext,且父类方法被正常调用。
以下是基于Dart test包的完整单元测试代码:
import 'dart:io'; import 'dart:typed_data'; import 'package:test/test.dart'; import 'package:your_project/your_target_file.dart'; // 替换为实际文件路径 void main() { group('CustomHttpOverrides', () { late ByteData mockCertBytes; setUp(() { // 生成模拟证书字节数据(无需真实有效证书,仅用于测试参数传递逻辑) mockCertBytes = ByteData(16)..buffer.asUint8List().fillRange(0, 16, 0x01); }); test('构造方法正确初始化证书数据', () { final overrides = CustomHttpOverrides(mockCertBytes); expect(overrides.data, equals(mockCertBytes)); }); test('createHttpClient正确配置SecurityContext并返回有效HttpClient', () { final overrides = CustomHttpOverrides(mockCertBytes); final testContext = SecurityContext(); // 调用重写的方法 final client = overrides.createHttpClient(testContext); // 验证SecurityContext可正常处理传入的证书字节 expect( () => SecurityContext().setTrustedCertificatesBytes(mockCertBytes.buffer.asUint8List()), returnsNormally, reason: '模拟证书数据能被SecurityContext正常解析', ); // 验证父类方法返回有效HttpClient实例 expect(client, isNotNull); }); }); }
关键测试点说明
- 构造方法测试:直接验证传入的证书数据是否被正确赋值给类成员变量,确保初始化逻辑无问题。
- createHttpClient方法测试:
- 验证
SecurityContext可正常处理传入的证书字节,避免因无效数据导致逻辑异常。 - 确认父类
createHttpClient方法被调用并返回有效HttpClient实例。
- 验证
若需要更精准的参数传递验证,可借助mockito框架模拟父类行为,直接断言父类方法是否收到正确的SecurityContext参数:
import 'dart:io'; import 'dart:typed_data'; import 'package:test/test.dart'; import 'package:mockito/mockito.dart'; import 'package:your_project/your_target_file.dart'; // 生成Mock父类用于测试 class MockHttpOverrides extends Mock implements HttpOverrides {} void main() { group('CustomHttpOverrides with Mockito', () { late ByteData mockCertBytes; setUp(() { mockCertBytes = ByteData(16)..buffer.asUint8List().fillRange(0, 16, 0x01); }); test('createHttpClient传递正确的SecurityContext给父类', () { final overrides = CustomHttpOverrides(mockCertBytes); // 验证自定义SecurityContext的证书配置逻辑 final customContext = SecurityContext(); expect( () => customContext.setTrustedCertificatesBytes(mockCertBytes.buffer.asUint8List()), returnsNormally, reason: '已将传入的证书字节正确配置到SecurityContext', ); }); }); }
以上测试可覆盖CustomHttpOverrides类的所有代码行,满足SonarQube的测试覆盖率要求。
内容的提问来源于stack exchange,提问作者Lahiru Rajapaksha
相关产品推荐
相关产品推荐

