我通常會編寫函數併爲它們編寫單元測試。 但對於做代碼轉換的宏,如何應用mathhing預期和實際值的邏輯?是否有策略在Clojure中測試宏?
因爲輸入到宏將代碼和輸出將代碼。這對我來說似乎非常有活力,能夠提出一些測試策略。
或者我可以使用一個樣本輸入的宏,並通過表達式macroexpand-1和匹配與預期的一個輸出是什麼?
我通常會編寫函數併爲它們編寫單元測試。 但對於做代碼轉換的宏,如何應用mathhing預期和實際值的邏輯?是否有策略在Clojure中測試宏?
因爲輸入到宏將代碼和輸出將代碼。這對我來說似乎非常有活力,能夠提出一些測試策略。
或者我可以使用一個樣本輸入的宏,並通過表達式macroexpand-1和匹配與預期的一個輸出是什麼?
我覺得這兩個例子都有優點。
對於小代換風格的宏可以測試的幾個例子的擴展形式。像Midje這樣的測試框架對此有幫助,它有an =expands-to=> checker。
但對於更復雜的例子,展開形式往往迅速在小的方面是從來沒有少做檢查的擴展形式很脆的發展過程中不斷變化。在這些例子中,我通常創建宏的特定用法的測試用例。
此:
或者我可以使用一個樣本輸入爲宏,和表達傳遞給 macroexpand-1和匹配與預期的輸出?
您應該通過編寫您期望的輸出來開始編寫宏,因此您應該已經有一個示例。
您還可以測試出來的宏的代碼,並驗證它是否按預期也一樣,你會測試功能。
我在這裏回答了一個非常類似的問題:http://stackoverflow.com/questions/16329109/is-there-a-tool-function-that-can-be-used-to-compare-patterns-macro -forms/16329164#16329164 - 希望它有幫助。 – leonardoborges