JavaScript单元测试的代码覆盖率分支是什么
我用于AngularJS项目中单元测试的代码覆盖率。有4种类型的保险,分别是JavaScript单元测试的代码覆盖率分支是什么,javascript,unit-testing,code-coverage,istanbul,Javascript,Unit Testing,Code Coverage,Istanbul,我用于AngularJS项目中单元测试的代码覆盖率。有4种类型的保险,分别是 声明 分支机构 作用 线 语句、函数和行都可以,但我不明白“分支”是什么。什么是分支?代码可以采用多条路径的地方,即it分支。分支语句的两个示例是if/else和switch语句 分支覆盖率跟踪已执行的分支,以便确保所有路由都已正确测试。来自: 是否已执行每个控制结构(如if和case语句)的每个分支(也称为DD路径)?例如,给定一个if语句,是否同时执行了true和false分支?另一种说法是,程序中的每一条边都
- 声明
- 分支机构
- 作用
- 线
语句、函数和行都可以,但我不明白“分支”是什么。什么是分支?代码可以采用多条路径的地方,即it分支。分支语句的两个示例是
if
/else
和switch
语句
分支覆盖率跟踪已执行的分支,以便确保所有路由都已正确测试。来自:
是否已执行每个控制结构(如if和case语句)的每个分支(也称为DD路径)?例如,给定一个if语句,是否同时执行了true和false分支?另一种说法是,程序中的每一条边都被执行了吗
您必须测试每个控制结构的所有可能情况(输入/不输入if语句,f.e.,以及开关的所有情况)。分支覆盖率是一个度量标准,用于度量(通常以百分比表示)测试覆盖的总分支数 一个分支是运行时可以选择它是走一条路径还是另一条路径的地方。让我们以下面的例子为例:
if(a) {
Foo();
}
if(b) {
Bar();
}
Yay();
当到达第一行时,它可以决定是否要进入if(a)
-语句的主体。此外,它可以决定不这样做。在这个阶段,我们已经看到了两条路径(一个分支)
之后的下一句话更有趣。它可以进入if
主体并执行条
。它也不能这样做。但请记住,我们以前已经有一家分店了。如果调用或未调用Foo
,结果可能会有所不同
因此,我们得出了四条可能的路径:
- 不调用
,也不调用Foo
Bar
- 调用
,不调用Foo
Bar
- 不调用
,调用Foo
Bar
- 调用
和Foo
Bar
Foo
还是Bar
,最后一个Yay
始终被执行,因此这不算作分支。因此,上面的代码片段包含四个路径/两个分支(调用Foo()
或不调用,调用Bar()
或不调用)
与前面提到的其他答案一样,有许多语句可能导致分支(if
/开关
)。少数但并非全部包括:
- 条件循环(即
/while
/for
)do while
或break
语句continue
- 二进制短路运算符(即
/&&
)| |
- 比如说。给定
,如果foo和&bar
为foo
,则不必计算false
。同样,对于bar
,如果foo | | bar
为foo
,true
也不必进行评估bar
- 比如说。给定
- 默认参数(即
)函数A(someVar=[]){…}
- 这是因为对该方法的调用被解释为
-语句。对于此方法的每次调用,如果参数if
,则检查该参数。如果是,则默认参数设置为未定义
(如上例)。这会导致分支存在someVar
- 这是因为对该方法的调用被解释为
代码覆盖率工具希望确保您已经测试了所有分支。最好是测试所有路径,甚至所有(边缘情况)值,而不仅仅是分支。这是为了确保不执行任何不需要的行为 谢谢你的详细回答。@Arseniy II默认参数值是如何导致分支的?这只是一个不同的值/调用。“不过我可能错了。”卡拉米利尔我只是在测试时得到了这个分支。我认为,从笑话的角度来看,这与:
让actualVar=someVar | |[]
是一样的。因此,基本上是“如果someVar
是未定义的,则使用[]
”。但如果您能检查一下,那就太好了:)