Flutter/Dart中Mockito是否有类似Java的调用真实方法的实现?
在Flutter/Dart中模拟对象时调用真实方法的实现方式
在Dart生态里,常用的mockito库(对应Java版Mockito)提供了两种类似thenCallRealMethod()的实现方式:
1. 生成Mock类时指定保留真实方法
通过@GenerateMocks注解的realCalls参数,可预先指定哪些方法保留真实实现。示例如下:
先定义原实体类:
class UserProfileEntity { String getFullName() { return "John Doe"; // 真实业务逻辑 } }
生成Mock类时指定要保留真实实现的方法:
@GenerateMocks([UserProfileEntity], realCalls: ['getFullName']) void main() { final mockUser = MockUserProfileEntity(); // 调用该方法时会执行真实实现 print(mockUser.getFullName()); // 输出: John Doe }
2. 动态指定调用真实方法
如果需要在测试过程中灵活控制,可通过thenAnswer直接调用真实对象的对应方法:
final realUser = UserProfileEntity(); final mockUser = MockUserProfileEntity(); // 当mock的getFullName被调用时,执行真实对象的方法 when(mockUser.getFullName()).thenAnswer((_) => realUser.getFullName());
这两种方式都能实现Java Mockito中thenCallRealMethod()的核心需求,可根据测试场景选择合适的方案。
内容的提问来源于stack exchange,提问作者FieryCat
相关产品推荐
相关产品推荐

