Mock继承Equatable的类触发警告,求无需ignore的轻量解决方案
解决Mock继承Equatable类时的「Don't implement classes that override "=="」警告
问题重现
你遇到的问题是当Mock一个继承自Equatable的类时,出现了「Don't implement classes that override "=="」的警告,代码示例如下:
class MyEquatableClass extends Equatable { @override List<Object?> get props => []; } class MockMyEquatableClass extends Mock implements MyEquatableClass {}
极简解决方案
不用加忽略注释,也不用完全填充模型,只需要给Mock类做两处小改动:
class MockMyEquatableClass extends Mock with EquatableMixin implements MyEquatableClass { @override List<Object?> get props => (this as dynamic).props; }
原理说明
- 通过
with EquatableMixin引入Equatable的==和hashCode实现,避免直接实现接口时与Mock的默认逻辑冲突 - 重写
props时将其转发到Mock的存根方法,这样你可以在测试中用when自定义props的返回值,比如:
final mockInstance = MockMyEquatableClass(); when(() => mockInstance.props).thenReturn(['id_123', 'test_value']);
这样改动后,既保留了Mock的所有测试功能,又让Equatable的相等性判断正常工作,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Alex Verbitski
相关产品推荐
相关产品推荐

