Dart 模拟类时发出警告
我正在读这篇文章——关于用飞镖模仿的,我已经让这个简单的例子起作用了Dart 模拟类时发出警告,dart,dart-unittest,Dart,Dart Unittest,我正在读这篇文章——关于用飞镖模仿的,我已经让这个简单的例子起作用了 import'包:unittest/mock.dart'; 福班{ int x; bar()=>“bar”; baz()=>“baz”; } 类MockFoo扩展Mock实现Foo{} void main(){ var mockFoo=新mockFoo(); mockFoo.when(callsTo('bar'))。 然后返回(“条”); 打印(mockFoo.bar()); } 代码正确地打印了“条”,因此模拟显然有效。但
import'包:unittest/mock.dart';
福班{
int x;
bar()=>“bar”;
baz()=>“baz”;
}
类MockFoo扩展Mock实现Foo{}
void main(){
var mockFoo=新mockFoo();
mockFoo.when(callsTo('bar'))。
然后返回(“条”);
打印(mockFoo.bar());
}
代码正确地打印了“条”,因此模拟显然有效。但Dart编辑器会生成一个警告/错误:
Missing inherited members: 'Foo.bar', 'Foo.baz' and 'Foo.x'
尽管有此警告/错误,代码似乎仍能正常工作,但我希望消除此错误。我该怎么做呢?因为MockFoo实现了Foo,所以您需要定义
x
、bar()
和baz()
,即使您只对bar()
的行为感兴趣。对于您的示例,这与执行以下操作一样简单:
类MockFoo扩展Mock实现Foo{
int x;
bar(){}
baz(){}
}
对于包含一长串成员的更为实质性的类,这种模式可能会变得相当乏味,但我不知道有什么更好的方法来消除编辑器警告。希望这有帮助。如果您实现了
noSuchMethod()
类MockFoo扩展Mock实现Foo{
noSuchMethod(调用调用){
返回super.noSuchMethod(调用);
}
}
执行此操作时,您可能还需要应用@proxy
注释。由于Mock类定义了noSuchMethod,因此只需在类中添加@proxy
注释就可以防止出现警告,但在最新的开发版本中似乎不是这样。感谢@MattB在Dart邮件列表中开始讨论该主题,Brian Wilkerson在其中提供了扩展的解释