上一篇博文介紹了如何使用DVS Excel對規則集進行測試,在最后拋出一個問題:對年齡是18但是未設置性別的人員進行測試,測試結果輸出為成年女性,這顯然是不正確的,即我們的規則判斷邏輯有漏洞,回顧一下我們性別檢查的操作規則:
仔細觀察一下上圖的邏輯不難發現,以上規則遺漏了性別為空的情況(即將沒有設置性別的人員默認設置為女性),這不符合所有的業務場景,有的朋友可能會說,再加一個判斷就可以了:
再如果(else if) '人員'的性別 是 "female" 那么 設置'人員'的當前信息為"成年女性" ;否則(else) 設置'人員'的當前信息為"...",但是很遺憾,ODM不支持類似else if的判斷,那怎么辦?不用擔心,我們用決策表來解決。
什么是決策表?大家只要記住,如果出現了類似需要多個if...else if....這樣的判斷邏輯的時候,您就應該考慮使用決策表了。
開始我們決策表的創建,點擊規則項目"PersonRule",查看“規則項目圖”,
點擊“添加決策表”導航條目,
包選擇“checkSex”,名稱輸入“性別檢查決策表”,點擊完成,此時,會自動打開新建的決策表編輯頁面:
如圖,默認的決策表有3列條件列,用來設置判斷條件,一列操作列,用來定義對符合所有條件列的結果做出的操作,大家可以根據自己的實際業務需求在表頭鼠標右鍵來刪除或添加相應的列(類似Excel操作),在我的這個業務場景中,只是對性別進行判斷,同時只是對人員的信息進行操作,所以,在這個決策表中,我只需要一個條件列和一個結果列,刪除兩個條件列之后如圖,
雙擊條件列表頭,
點擊“<條件>”並配合快捷鍵“Ctrl+Shift+空格”調出詞匯表,完成條件設置,將標題修改為“性別檢查”,
點擊“確定”,這樣就完成條件列判斷條件的設置,接下來設置值,分別為:"male","female","",
設置操作列操作,雙擊表頭B,
使用詞匯表編輯操作,將標題修改為“設置人員信息”,
點擊“確認”按鈕,完成操作語句的設置,
設置相應條件對應的操作,
這樣就完成了決策表的編輯,是不是很簡單?別忘記保存!
接下來我們將決策表加入到規則流中,使用上一篇博文介紹的DVS測試來對決策表進行測試。雙擊打開規則流編輯視圖,
將“性別檢查”操作規則刪除,並將“性別檢查決策表”拖拽進來,使用鏈接線連接好,
其他結構不用改變,規則流定義好了。
接下來,向測試方案中添加一條測試數據,打開測試方案文件,添加一條測試方案,
設置預期,
保存測試方案並關閉文件,執行測試,控制台輸出如下,
再查看一下測試報告:
方案1,2執行完畢並且正確,
方案三報錯了,結合日志中顯示的那我們基本就可以確定問題出在哪了,
去查看一下決策表,並切換成IRL tab頁進行顯示
在此界面可以更好的看到單條規則是如何進行判斷和執行的,這里便可以看出問題,規則的判斷如下圖:
此條判斷語句要求人員的性別不能為空(null),否則會有空指針異常,問題找到了,去修改一下測試方案
打開測試方案,將新添加的測試人員中的性別修改為""(條件設置的也是""),保存並關閉測試方案文件,
再次運行測試,測試完成,並沒有再報錯,
查看測試報告,
方案1,2執行正確,新添加的人員性別為""的測試案例失敗了,我們預期的是:當人員性別為""時,設置的人員信息應該是“未知性別成年人”,但是執行結果卻將人員的信息設置成了null,這是為什么呢?
反過來再去看看我們設置對應這個邏輯的規則,
如上圖,我並沒有發現有什么問題,"".equals("") == true,的確沒有問題,又做了多種嘗試,均沒有得到正確的結果,只能請教ODM支持人員,支持人員沒有說這是什么原因造成的,只是建議在決策表中使用“否則”語句來處理這個問題,於是修改決策表,添加“否則”語句,讓我們回到決策表(決策表視圖而非IRL視圖),並右鍵將我們設置的“人員性別為"",設置人員信息為“未知性別成年人””規則刪除,
此時,只剩下了對male和female的判斷,在條件的第2行,鼠標右鍵》添加》否則,將否則語句添加進條件列下,然后設置操列中的信息仍為“未知性別成年人”,
這條語句的意思為:除了上述的條件外,設置人員性別為“未知性別的成年人”,查看該條規則的執行語句(IRL視圖),
再次進行測試,查看測試報告,
方案3也執行成功了,使用“否則”還有一個好處,排除了性別為null帶來的報錯問題。
此片博文到此就結束了,大家可以跟着以上的步驟嘗試一下,我感覺犯一下上面提到的問題能讓你更深刻的了解決策表和掌握更多的技巧。
后續還有更多精彩的內容更新,請大家持續關注哦!
如您有任何建議或意見,請留言或評論,我會在第一時間回復您!
歡迎轉載,惠及他人,但請您注明出處!感謝!