3

我正在阅读这篇文章 - https://www.dartlang.org/articles/mocking-with-dart/ - 关于使用 Dart 进行模拟,并且已经让这个简单的示例正常工作。

import 'package:unittest/mock.dart';

class Foo {
  int x;
  bar() => 'bar';
  baz() => 'baz';
}

class MockFoo extends Mock implements Foo {}

void main() {
  var mockFoo = new MockFoo();
  mockFoo.when(callsTo('bar')).
      thenReturn('BAR');

  print(mockFoo.bar());
}

代码正确打印“BAR”,因此模拟显然有效。但 Dart 编辑器会生成警告/错误:

Missing inherited members: 'Foo.bar', 'Foo.baz' and 'Foo.x'

尽管有这个警告/错误,代码似乎工作,但我想摆脱错误。我怎么做?

4

2 回答 2

1

如果您实施,您可以使警告静音noSuchMethod()

class MockFoo extends Mock implements Foo {
  noSuchMethod(Invocation invocation) {
    return super.noSuchMethod(invocation);
  }
}
于 2014-01-02T17:37:59.277 回答
1

由于 MockFoo 实现了 Foo,因此您需要定义和x,即使您只对. 对于您的示例,这就像执行以下操作一样简单:bar()baz()bar()

class MockFoo extends Mock implements Foo {
  int x;
  bar() {}
  baz() {}
}

对于包含一长串成员的更实质性的类,这种模式可能会变得相当乏味,但我不知道有更好的方法来消除编辑器警告。希望这可以帮助。

于 2014-01-02T16:58:55.103 回答