簡體   English   中英

語法高亮工具如何實現自動化測試?

[英]How do syntax highlighting tools implement automated testing?

pygmentstextmate bundle等語法高亮工具如何進行自動化測試?

像這樣的工具通常只是簡單地使用大量文本片段來表示選定的輸入和預期的輸出。 例如,如果您查看Pygments Github ,您會看到它們有大量的文本文件列表,分為input部分和tokens部分,如下所示:

---input---
f'{"quoted string"}'

---tokens---
'f'           Literal.String.Affix
"'"           Literal.String.Single
'{'           Literal.String.Interpol
'"'           Literal.String.Double
'quoted string' Literal.String.Double
'"'           Literal.String.Double
'}'           Literal.String.Interpol
"'"           Literal.String.Single
'\n'          Text

由於高亮工具讀取一段代碼,然后必須識別哪些文本位是哪些代碼位的一部分(這是函數的開始?這是一個注釋?它是一個變量名?),它們通常執行將產生上述標記列表的各種處理步驟,然后它們可以將其輸入到下一步(插入從第一個Literal.String.Interpol到下一個的突出顯示,通過生成加粗任何Literal.String.Single等適當的 HTML 或 CSS 或其他與系統相關的標記)。 檢查這些標記是否從輸入文本正確生成是關鍵。

然后,根據工具內置的語言,您可能會使用現有的測試套件或構建自己的測試套件(pygments 似乎使用一個名為pyTest的基於 Python 的工具),它基本上包括通過您的工具運行每個input一個循環,讀取輸出,並將其與預期值進行比較。 如果輸出不匹配,您可以顯示一條消息,顯示哪些測試失敗,輸入/輸出/預期/錯誤值是什么。 如果輸出通過,您可以簡單地用一個快樂的綠色復選標記發出信號。 然后,當測試完成時,開發人員可以通過查看結果來推斷出他們破壞了什么。

隨機化這些輸入的順序通常是一個好主意,這樣您就可以確保測試中的每個步驟都不會產生副作用,這些副作用會傳遞到下一個測試並導致它錯誤地通過或失敗。 對完整測試的時間進行計時也可能是一個好主意。 如果昨天整個過程需要 12 秒,但現在需要兩分鍾,那么即使所有測試在技術上“通過”,我們也可能破壞了某些東西。

在諸如代碼高亮器之類的工具中,在對所有內容進行編碼之前,您通常對許多輸入和輸出的外觀有一個很好的了解,例如,如果某些規范文檔已經存在。 在這種情況下,包含您知道不會立即通過的測試可能是一個好主意,但用一些標簽標記它們(可能是文件中顯示“未通過”的一些文本標記,或以某種方式),並告訴您的測試套件預計這些測試會失敗。 然后,當您修復錯誤和添加功能時,假設您修復了錯誤 X 以嘗試通過測試 #144。 現在,當您運行文本時,它還會提醒您其他 10 個應該失敗的測試現在正在通過。 恭喜! 您只是在嘗試解決實際上由同一根問題引起的幾個單獨問題時節省了大量工作。

隨着代碼庫的更新,開發人員將運行並重新運行測試以確保他所做的任何更改不會破壞之前工作的測試,然后將新測試添加到集合中以驗證他的新功能,修復了邊緣情況等,現在有一個已知的預期輸出,您可以確定將來不會有人意外破壞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM