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

如何修复Mockito单元测试中的‘Null类型不是int子类型’错误?

修复Mockito单元测试中的‘Null类型不是int子类型’错误

错误原因分析

报错type 'Null' is not a subtype of type 'int'的核心原因是:MockCalculator的add方法未被正确Stub(预设返回值),调用时返回默认的null,但方法声明返回int类型,触发类型转换错误。结合你的代码,还有两个具体问题:

  1. 测试文件导入路径错误,未正确引入原始Calculator类
  2. MockCalculator类的定义或生成不规范,导致Stub逻辑未生效

修复步骤

1. 修正导入路径

打开test/calculator_mock_test.dart,把错误的导入:

import 'calculator_test.dart';

替换为指向lib目录下的原始Calculator类:

import '../lib/calculator.dart';

2. 正确定义MockCalculator类

你有两种方式创建合法的MockCalculator:

方式一:手动定义Mock类(快速简单)

直接在测试文件中添加MockCalculator的定义,继承Mock并实现Calculator接口:

import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import '../lib/calculator.dart';

// 手动定义Mock类
class MockCalculator extends Mock implements Calculator {}

void main() {
  group('Calculator', () {
    test('addition', () {
      final mockCalculator = MockCalculator();

      // 预设add方法的行为
      when(mockCalculator.add(2, 3)).thenReturn(5);

      final result = mockCalculator.add(2, 3);

      verify(mockCalculator.add(2, 3));
      expect(result, 5);
    });
  });
}

方式二:使用Mockito代码生成(规范推荐,适合复杂类)

如果后续需要扩展更多Mock方法,推荐用代码生成工具:

  1. 在pubspec.yaml的dev_dependencies中添加依赖:
dev_dependencies:
  flutter_test:
    sdk: flutter
  mockito: ^5.4.0
  build_runner: ^2.4.0
  1. 运行命令安装依赖:
flutter pub get
  1. 创建test/calculator_mock.dart文件,内容:
import 'package:mockito/mockito.dart';
import '../lib/calculator.dart';

class MockCalculator extends Mock implements Calculator {}
  1. 运行命令生成Mock代码:
flutter pub run build_runner build
  1. 在测试文件中导入生成的Mock类:
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import '../lib/calculator.dart';
import 'calculator_mock.dart'; // 导入生成的Mock类

void main() {
  // 测试逻辑不变
}

3. 确保Stub逻辑覆盖调用场景

如果调用add方法时的参数和when中预设的参数不匹配,Mock会返回null。比如测试中调用mockCalculator.add(3,4)但只预设了add(2,3),就会触发同样的错误。如果需要匹配任意参数,可以用any:

when(mockCalculator.add(any, any)).thenReturn(5);

验证修复

重新运行单元测试:

flutter test test/calculator_mock_test.dart

此时测试应该正常通过,不会再出现类型转换错误。

内容的提问来源于stack exchange,提问作者Bolt UIX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:05:05