【问题标题】:Test Case Not covering a branch测试用例不覆盖分支
【发布时间】:2018-08-10 14:01:29
【问题描述】:

我有一个代码可以计算一个人的年龄并根据结果采取一些行动。

age = calculateAge();

if (age <= 30 || (age > 30 && city="newyork")){
println("Welcome")
}

我有用 Spock 编写的测试用例,其中包含所有可能的年龄和城市值

25|Newyork
25|London
30|Newyork
30|London
35|Newyork
35|London

但仍然缺少一个分支。 如果我将年龄

有什么想法吗?

【问题讨论】:

  • city="newyork" 是一个作业

标签: java groovy kotlin spock


【解决方案1】:

这是因为age &gt; 30 检查是多余的 - 在这种情况下不会执行它并返回 false。如果执行到这一点,条件将返回 true,因为它只会在 age &lt;= 30 为 false 时执行。发生这种情况是因为|| 是一个“短路”运算符,这意味着(对于“||”)它仅在左侧为假时才执行右侧(好像左侧为真,结果无论右侧的结果如何,“或”运算的结果都是正确的。

&amp;&amp; 运算符也是如此(在相反的意义上),除了在这种情况下,如果左侧为真,它只执行右侧,如果它为假,就好像它在左侧一样,无论右侧的结果如何,&amp;&amp; 的结果也必须为 false。

您可以将此检查替换为:

if (age <= 30 || city == "newyork") {
   println("Welcome")
}

您将拥有相同的功能,并且将涵盖所有分支。

【讨论】:

  • 感谢您的快速回复和详细解释。这是有道理的。让我进行更改并进行测试。
猜你喜欢
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 2022-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多