行(Lines of Source Code) vs 可实行代码行(Lines of Executable Code)
“行覆盖率”中的行是指可实行代码行(Lines of Executable Code),而不是源文件中全部的行(含空行)(Lines of Source Code)。一样平常来说,包含语句的每一行都应被视为可实行行,而复合语句(简称为语句块,用 {} 括起来)会被忽略,但其内容除外。如下所示非可实行行标记为+0:
function doTheThing () // +0
{ // +0
const num = 1; // +1
console.log(num); // +1
} // +0
复制代码
对于DevEco Studio的覆盖率测试引擎来说:
import、声明语句都被视为非可实行行(+0),赋值等语句视为可实行行(+1)。
如果某行存在可实行代码,则这一整行会被视为可实行代码行(+1)。
如果一个语句被拆分为多行,则该可实行代码块中,仅第一行被会视为可实行行。
如果某行只包含标点符号 } 、 }); 或 ; ,会被视为非可实行行(+0)。
如果某行只定义方法名,会被视为非可实行行(+0)。
不管嵌套语句高出多少行,可实行行的数目仅会 +1。
示例如下:
import { window } from '@kit.ArkUI'; // +0 import导入
const path = 'path';
let filePath :string; // +0
const fileName = 'a.txt'; // +1 不仅是声明,还有赋值
export function doTheThing () // +0
{ // +0
const str = 'aaa'; // +1
console.log(str); // +1
}
class Person { // +0
name: string = '' // +1
constructor (n:string) { // +0
this.name = n; // +1
} // +0
static sayHello () { // +0
console.log('hello'); // +1
} // +0
walk () {} // +0
}
let person = new Person("zhangsan");
Person.sayHello();
person.walk();
'use strict';
for // +1
( // +0
let i=0; // +1
i < 10; // +0
i++ // +0
) // +0
{ // +0
} // +0
function func ():object { // +0
return Object({ // +1 一个语句被拆分为多行
a: 1, // +0
b: 2, // +0
}) // +0
} // +0
func();
function foo(n:number, m:number){} // +0
function bar():number{ // +0
return 1; // +1
}
foo(1, bar()); // +1
foo(1, // +1 嵌套语句横跨多行 可执行行的数目仅+1
bar()); // +0
复制代码
可实行代码行 vs 语句
一样平常情况下,如果我们服从良好的代码规范,可实行代码行和语句的表现是划一的。然而当我们将两个语句放一行时,就会得到不同的结果。如下所示,第一段代码是2 lines、2 statements,第二段代码是1 line、2 statements。