当我们遇到以下情况时,可以做出如下定义:当条件是true时,触发某个函数或子程序、又或者某段代码执行。一般情况下,我们是通过编写决策结构代码来实现,比如简单情况下使用'IF-Else'结构代码,复杂情况下,会使用Switch(在JavaScript中)结构代码。
然而,我们也可以通过数据驱动的方式来实现它。例如:假设有一个excel文档,里面有两列,分别命名为"条件"和"行为"。"条件"列对应的单元格下,每行将包含一字符串表达式,可以被计算成"真"或者"假"。若结果是"真",则执行"行为"列中单元格里面的函数(或者一段有效代码)。
该excel列表将被作为字典对象数据加载进来,再定义一个函数,函数将计算字典对象中每个条件项的结果,当计算到某一行的条件是true或者计算到整个数据列表结束,则退出。在下面,你可以看到这个函数,将很精确的实现该特性。
函数的数字签名是:
Function [Select Case](ByVal dicCases)
dicCases是一个带有键-值对的字典对象,键定义每个条件,值定义条件为真时的执行。
请注意:方括号是VBScript一不太常用的特性,里面可以使用特殊字符或者保留关键字来标识。
Function [Select Case](ByVal dicCases)
Dim [Case], [Cases]
[Select Case] = False
If (Not TypeName(dicCases) = "Dictionary") Then
Print("Nothing to do")
Exit Function
End If
If (dicCases.Count = 0) Then
Print("Nothing to do")
Exit Function
End If
[Cases] = dicCases.keys
For each [Case] in [Cases]
[Select Case] = Eval([Case])
If([Select Case])Then
Execute(dicCases([Case]))
Exit For
End If
Next
End Function
使用
Dim arrTemp, i
Dim dic
Set dic = CreateObject("Scripting.Dictionary")
dic.Add "arrTemp(i)>70", "Print(arrTemp(i)&"" Wear a T-Shirt!"")"
dic.Add "arrTemp(i)>60", "Print(arrTemp(i)&"" Wear a hat!"")"
dic.Add "arrTemp(i)>50", "Print(arrTemp(i)&"" Wear a long-sleeved shirt!"")"
dic.Add "arrTemp(i)
arrTemp = Array(50, 55, 60, 65, 70, 80)
For i = LBound(arrTemp) To UBound(arrTemp)
[Select Case](dic)
Next
输出
50 Wear a coat!
55 Wear a long-sleeved shirt!
60 Wear a long-sleeved shirt!
65 Wear a hat!
70 Wear a hat!
80 Wear a T-Shirt!
.......
本文出自《51测试天地》原创测试文章系列(四十四)