Дарт, Почему в моем классе нет ошибок, когда я реализую класс без переопределения каждого поля, но расширяет Mock от Mockito? - PullRequest
0 голосов
/ 24 апреля 2020

Я в дротике.

Почему в моем классе нет ошибок, когда я реализую класс без переопределения каждого поля, но расширяет Mock из Mockito?

Например,

class Base {
  void a() {}
  void b() {}
}

// NO ERROR
class ConcreteA implements Base {

  @override
  void a() {}

  @override
  void b() {}

}

// ERROR: Didn't override every field.
class ConcreteB implements Base {

  @override
  void a() {}

}

// NO ERROR
class ConcreteC extends Mock implements Base {

  @override
  void a() {}

}

Как мог бы Mockito реализовать это?

1 Ответ

1 голос
/ 24 апреля 2020

Класс Mock реализует здесь «магически» Base, поскольку Mock переопределяет метод noSuchMethod .

  dynamic noSuchMethod(Invocation invocation, [Object /*?*/ returnValue]) {
   // noSuchMethod is that 'magic' that allows us to ignore implementing fields
   // and methods and instead define them later at compile-time per instance.
   // See "Emulating Functions and Interactions" on dartlang.org: goo.gl/r3IQUH

Методы из Base фактически реализуются Mock во время компиляции.

Таким образом, поскольку Concrete C является подклассом Mock, ошибки не должны отображаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...