--- +附圖ISO ERT直列測試成語(追加來自多個ERT呼叫TEST_OUTPUT)
問:如果有多個,分離的,獨立於ERT呼叫,我可以安排來連接這些輸出在同一個緩衝區中測試?在不同時間撥打ert電話?
(如果沒有知道這些獨立的測試集中thingamajig。)
例如如果我有兩個(或更多)測試,例如在.emacs文件
(ert-deftest test1()(should t))
(ert 'test1)
... many miles away, quite likely in a separate file ...
(ert-deftest test2()(should t))
(ert 'test2)
雙方將跑 - 我可以告訴這個通過查看*Messages*
...
Running 1 tests (2017-07-07 12:10:39-0700)
passed 1/1 test_ag_non-null_and_true
...
Running 1 tests (2017-07-07 12:10:39-0700)
passed 1/1 test-ag-code-disabling
...
但*ert*
緩衝區將只包含最後一次測試運行輸出。
--- + DETAIL
--- ++動機
問:爲什麼我要這麼做?
答:「內聯測試」。特別是,在我的.emacs文件(以及它加載和/或需要的文件)中進行內聯測試。
加載每次運行.emacs或類似文件的測試。 (可能還有其他測試是以批處理模式運行的 - 但我在這裏說的是我想要立即運行的測試,每次加載.emacs都會加載(並且便於在修改.emacs時進行編輯/調試)
即我找了在線測試成語
我已經把代碼在我的.emacs和〜/ lib目錄/ GNU-Emacs的/ ** EL文件看起來像這樣:。
;; some blob of code
(defun foo (arg) ...)
(ert-deftest test-foo() ...)
(ert 'test-foo)
ie ie我定義了功能,測試,並運行測試,彼此相鄰。
...我還不如承認,我經常換一個`progn這個」周圍,
(progn
;; some blob of code
(defun foo (arg) ...)
(ert-deftest test-foo() ...)
(ert 'test-foo)
)
,因爲這可以很容易地進行編輯,以函數foo或測試,然後跳轉到的結束預測和做eval-last-sexp(我已經綁定到Cj)。而且我還經常包裝if或and和around,以便輕鬆禁用正在開發的功能。有時,如果特徵有變量,則在*中混合。
(我使用過的其他ert-家庭跑步,像ERT-運行測試批和叔 - 運行 - 測試 - 交互式。但普通的老式叔似乎不夠。)
(把defun定義和deftest一個progn這個裏面或其他休息時間一些工具,希望defun定義始終處於頂級水平。這讓multiline docstrings even uglier,但它是該死的方便,而且操作恕我直言工具對編程語言文件應該解析編程語言)。
所以,以後我會對另一個模塊做同樣的事情。遠處。可能在一個單獨的文件中,可能是一個庫文件。
(progn
;; some blob of code
(defun bar (arg) ...)
(ert-deftest test-bar() ...)
(ert 'test-bar)
)
這兩個模塊都不應該知道另一個。
也不應該有一個集中的模塊,其中包含所有這些測試的列表,最終運行。
如果僅僅是因爲在加載文件的過程中可能出現故障。並且知道到目前爲止通過或失敗的測試是很方便的。
(儘管收集和運行,在結束所有試驗丟失了增量測試運行的能力。)
--- ++應該是一個宏觀
我恨重複。例如。在下面的東西中,我討厭三次輸入BAR。
(progn
;; some blob of code
(defun BAR (arg) ...)
(ert-deftest test-BAR() ...)
(ert 'test-BAR)
)
因此,當然我會創建一個宏來減少這種重複。雖然隨後鄉親尋找ERT-deftest會感到困惑......
--- ++中等長度的簡單的例子
如果我有
(ert-deftest test1()(should t))
(ert 'test1)
我會得到一個不錯*ert*
緩衝區
Selector: test1
Passed: 1
Failed: 0
Skipped: 0
Total: 1/1
Started at: 2017-07-07 14:16:06-0700
Finished.
Finished at: 2017-07-07 14:16:07-0700
.
如果後來我有
(ert-deftest test2() (should t))
(ert 'test2)
它會刪除TEST1在*ert*
緩衝輸出,並與
Selector: test2
Passed: 1
Failed: 0
Skipped: 0
Total: 1/1
Started at: 2017-07-07 14:15:47-0700
Finished.
Finished at: 2017-07-07 14:15:47-0700
.
取代它,我想的是讓串連兩個測試的輸出:
Selector: test1
Passed: 1
Failed: 0
Skipped: 0
Total: 1/1
Started at: 2017-07-07 14:16:06-0700
Finished.
Finished at: 2017-07-07 14:16:07-0700
.
Selector: test2
Passed: 1
Failed: 0
Skipped: 0
Total: 1/1
Started at: 2017-07-07 14:15:47-0700
Finished.
Finished at: 2017-07-07 14:15:47-0700
.