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
相关产品推荐
相关产品推荐

