D语言检查测试代码覆盖率

阅读更多
测试写到什么程度算足够? 这个帖子对单元测试作了些探讨,代码覆盖率检查是检验单元测试的一项指标。

DMD编译器内建了代码覆盖率检查,根据上面这个帖子我们写一个测试:
int oddNumber(int index){
  switch (index){
  case 1: return 1;
  case 2: return 2;
  case 3: return 5;
  case 4: return 8;
  }
  throw new Exception("Unsupported operation");
}

unittest{
  assert(oddNumber(1) == 1);
  assert(oddNumber(2) == 2);
  assert(oddNumber(4) == 8 );
}

void main(){
}

编译:
dmd test.d -unittest -cov

-cov选项打开覆盖率检查,-unittest是unittest块的编译开关,空的main函数是必要的,它并不为单元测试自动生成启动函数。

执行:
./test

会生成test.lst文件,内容如下:
$ cat test.lst
       |int oddNumber(int index){
      3|  switch (index){
      2|  case 1: return 1;
      2|  case 2: return 2;
0000000|  case 3: return 5;
      2|  case 4: return 8;
       |  }
0000000|  throw new Exception("Unsupported operation");
       |}
       |
       |unittest{
      1|  assert(oddNumber(1) == 1);
      1|  assert(oddNumber(2) == 2);
      1|  assert(oddNumber(4) == 8 );
       |}
       |
       |void main(){
       |}
test.d is 77% covered

只需要grep一下"0000000|"即可找到没有测试到的地方,如果有好的IDE就方便了。

更详细的资料请看这里:
http://digitalmars.com/d/code_coverage.html

你可能感兴趣的:(D语言,单元测试,IDE,HTML)