如何测试Dart类的静态常数?

时间:2019-02-18 06:32:28

标签: testing dart code-coverage

enter image description here

这是我的测试代码:

   SizedBox(
   width: MediaQuery.of(context).size.width  // This will make your list fill the screen horizontally
   height: 100.0 // you can edit it as you desire but it should be small to make the effect of scroll-able row
   child: listview.builder(
      scrollDirection: Axis.horizontal, //This will make your list scroll on the horizontal axis
      itemCount: 10.0,
      itemBuilder: (BuildContext content, int index) {

      // Your itemBuilder code here

      }
    ),
  ),

但上图显示未测试静态常数代码。为什么?

版本信息:

 test('should set correct constant', (){
    expect(Stores.CurrentContext, 'currentContext');
  });

1 个答案:

答案 0 :(得分:0)

覆盖工具注册正在运行的代码访问了哪些代码指令。

将其视为由程序计数器寄存器访问的“代码段”的存储地址的记录  处理器逐步执行程序功能的过程。

通过数据存储器访问可访问静态变量,不涉及任何代码指令: 如果变量是常数,则应位于堆栈,堆或数据节中。

考虑以下代码:

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

如果您的报表工具在静态变量上显示红线,则必须将其视为“假阳性”:继续生存或更改报表工具。