You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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方法测试:
    1. 验证SecurityContext可正常处理传入的证书字节,避免因无效数据导致逻辑异常。
    2. 确认父类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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:32:48