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

Flutter TDD与整洁架构开发中类型不匹配报错求助

问题排查与修复

错误根源

报错type 'Null' is not a subtype of type 'Future<Either<Failure, NumberTrivia>>'的核心原因是类型不匹配导致Mock未命中:

  • GetConcreteNumberTrivia的execute方法中,required number未指定类型,默认是dynamic类型。
  • 测试中Mock的匹配条件是getConcreteNumberTrivia(testNumber)(参数为int类型),但实际调用时传入的number是dynamic类型,Mock无法匹配,返回默认的null,从而触发类型转换错误。

修复步骤

1. 给execute方法参数指定明确类型

修改GetConcreteNumberTrivia类的execute方法,为number添加int类型约束:

class GetConcreteNumberTrivia {
  final NumberTriviaRepository repository;

  GetConcreteNumberTrivia(this.repository);

  // 给number参数添加int类型
  Future<Either<Failure, NumberTrivia>> execute({required int number}) async {
    return await repository.getConcreteNumberTrivia(number);
  }
}

2. 可选:优化Mock匹配(增强灵活性)

如果需要让Mock匹配任意int类型参数,可以使用any匹配器(需导入package:mockito/mockito.dart):

when(mockNumberTriviaRepository.getConcreteNumberTrivia(any))
    .thenAnswer((_) async => const Right(testNumberTrivia));

3. 验证依赖类正确性

确保已正确导入dartz包的Either、Right类,以及自定义的Failure类,避免因依赖缺失导致的隐性错误。

修复后验证

修改完成后,测试中的Mock会准确匹配到getConcreteNumberTrivia调用,返回预期的Right(testNumberTrivia),测试用例即可通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:00:56