这是我的测试代码:
test('should set correct constant', (){
expect(Stores.CurrentContext, 'currentContext');
});
但上图显示静态常量代码未经测试。为什么?
版本信息:
Flutter 1.2.2-pre.3 • channel master • https://github.com/flutter/flutter.git
Framework • revision 67cf21577f (4 days ago) • 2019-02-14 23:17:16 -0800
Engine • revision 3757390fa4
Tools • Dart 2.1.2 (build 2.1.2-dev.0.0 0a7dcf17eb)
覆盖工具记录正在运行的代码访问的代码指令。
可以将其视为通过程序功能逐步执行的处理器的程序计数器寄存器访问的“代码段”的存储器地址的记录。
通过数据存储器访问到达静态变量,不涉及代码指令:变量应该在堆栈上,堆上或数据部分中(如果它是常量)。
考虑以下代码:
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%的覆盖率:
如果您报告工具在静态变量上显示红线,则必须将其视为“误报”:使用它或更改报告工具。