Средство покрытия регистрирует, к каким инструкциям кода обращался запущенный код.
Думайте об этом как о записи адресов памяти «разделов кода», которые посещает регистр счетчика программ процессора, проходящего через программуfunctions.
Статическая переменная достигается через доступ к памяти данных, никаких инструкций кода не требуется: переменная должна быть в стеке, в куче или в разделе данных, если она является константой.
Рассмотрим этот код:
import 'package:rxdart/rxdart.dart';
class Stores {
static const String Login = 'login';
static const String CurrentContext = 'currentContext';
}
class Store {
final name;
static var eMap = Map();
Store._internal(this.name); // DA:13
factory Store(String name) { // DA:15
if (eMap.containsKey(name)) { // DA:16
return eMap[name]; // DA:17
} else {
final store = Store._internal(name); // DA:19
eMap[name] = store; // DA:20
return store;
}
}
}
и этот код выполняется:
test('should set correct constant', (){
Store('currentContext');
Store('currentContext');
expect(Stores.CurrentContext, 'currentContext');
});
Если вы посмотрите на необработанный вывод icov, вы заметите, что число строк статическоепеременная никогда не достигается, придавая значение модели, описанной выше:
SF:lib/stores.dart
DA:13,1
DA:15,1
DA:16,2
DA:17,2
DA:19,1
DA:20,2
LF:6
LH:6
Средство визуальной отчетности показывает 100% охват:
![enter image description here](https://i.stack.imgur.com/nmGe4.png)
Если ваш инструмент отчетности показывает красные линии над статическими переменными, его следует считать «ложноположительным»: выжить с ним или изменить инструмент отчетности.