Почему покрытие теста флаттера не распространяется на утверждения об утверждении? - PullRequest
1 голос
/ 17 февраля 2020

У меня есть конструктор для LoginPageBlo c, как показано ниже

 LoginPageBloc(
  {@required this.dataRepository,
 })
  : assert(null != dataRepository);

, когда я использую тест трепетания --coverage, операторы утверждения исключаются. почему ??

Затем я проверил репозиторий dart-lang на наличие открытых проблем и обнаружил this .

Этот общий результат также показывает ту же проблему (обнаруженную в этой проблеме git репо).

Но этот статус проблемы закрыт, и я обнаружил следующее сообщение @ ZichangG.

VM использует функцию звонки для определения. Выполненные вызовы будут рассматриваться как попадание.

Если вычисляется переменная, например, assert (mode == null), будет вызываться неявная функция получения, если она не является локальной переменной. В этом случае assert (callback! = Null) callback является локальной переменной и здесь также не вызывается.

Когда выполняемые функции оцениваются, мы устанавливаем первую позицию токена этой функции как удар. Вероятно, это причина того, что строка типа assert (() {будет помечена как нажатая. Поскольку в этой строке запускается функция замыкания.

Мне трудно понять вышеприведенное сообщение @ZichangG.

К сожалению, я все еще испытываю ту же проблему. Только из-за этих утверждений утверждения я не могу достичь 100% покрытия кода.

почему покрытие теста флаттера не охватывает заявления утверждения?

Не могли бы вы объяснить мне причину этого и что я должен сделать, чтобы избежать этого?

1 Ответ

0 голосов
/ 18 февраля 2020

Вы можете заключить вызов assert в функцию till, чтобы обойти проблему.

См. Ниже,

Определить функцию util

  void assertNotNull(Object object) {
    assert(object != null);
    }

Используйте это как

 assertNotNull(dataRepository);
...