当布尔"if"有三个结果代码路径时,你怎么看?

ben*_*enc 2 conditional design-patterns

(背景:从以前的工作,一个同事,我最终会在午餐时讨论错误堆.我们开始开发一个名为"本周的错误"的主题.我怀疑我每年有52个帖子的材料,但是这是第一个......)

报告人:

QA测试人员正在阅读HTML/JS代码以编写Web表单的功能测试,并看到:

if (form_field == empty)
{
...do stuff for empty field
}
else if (form_field != empty)
{
...do stuff for non-empty field
}
else
{
...do stuff that will never be done
}
Run Code Online (Sandbox Code Playgroud)

经过几次尴尬的尝试,测试人员意识到他们无法触发隐藏在第三个区块中的警报字符串.

我想知道的是:

  • 这个问题或多或少是语言特定的(非JS人员可以在这里学习课程吗?)
  • 代码以这种方式结束是否有正当理由?
  • 应该使用哪些方法来查找/解决问题(代码覆盖率,代码审查,黑盒测试等)

其他几点:

  1. 我希望我们能保持积极的态度.想象一下,这是一个与你合作的人(在一家不鼓励燃烧的公司).无论你认为有罪的一方是什么意思,我可能已经考虑过了.

  2. 我不是职业编码员.我检查了wiki框,以防有人想提供更文字的例子,或者添加到线程的基础.

[编辑]类似于/sf/ask/8003971/

God*_*eke 8

虽然第三个块不能在Javascript中触发,但在所有语言中都不是这样.在T-SQL中:

declare @test as int

set @test = null

if @test = 1 
  print 1
else if not @test = 1
  print 2
else 
  print 3
Run Code Online (Sandbox Code Playgroud)

这将打印3,因为NULL既不等于,也不等于任何其他值.