首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >inline在线测试成语(从多个ert调用中追加TEST_OUTPUT )

inline在线测试成语(从多个ert调用中追加TEST_OUTPUT )
EN

Stack Overflow用户
提问于 2017-07-07 22:21:21
回答 1查看 27关注 0票数 0

-+简略

问:如果我对ert有多个单独的独立调用,我能安排在同一个缓冲区中连接这些测试的输出吗?在不同的时间打电话给ert?

(没有一个知道这些独立测试的集中式测试。)

例如,如果我有两个(或更多)测试,例如在一个.emacs文件中

代码语言:javascript
复制
 (ert-deftest test1 ()(should t))
 (ert 'test1)

 ... many miles away, quite likely in a separate file ...

 (ert-deftest test2 ()(should t))
 (ert 'test2)

两人都会跑--我可以通过查看*Messages*来判断这一点。

代码语言:javascript
复制
...
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*缓冲区将只包含最后一次测试运行的输出。

-+细节

-++动机

问:我为什么要这么做?

答:“内联测试”。特别是,对我的.emacs文件(以及它加载和/或需要的文件)中的内容进行内联测试。

每次加载.emacs或类似文件时都会运行的测试。(可能还有其他以批处理模式运行的测试-但这里我要讨论的是每次加载.emacs时都要立即运行的测试(以及在修改.emacs时方便编辑/调试)。

我在找一个用于内嵌测试的成语。

我在我的.emacs和~/lib/gnu-emacs/**..el文件中放置了如下代码:

代码语言:javascript
复制
;; some blob of code
(defun foo (arg) ... )

(ert-deftest test-foo () ... )
(ert 'test-foo)

也就是说,我定义了函数,测试,并运行测试,就在彼此旁边。

..。我不妨承认,我经常把一个“宣言”围绕在一起,

代码语言:javascript
复制
(progn     
   ;; some blob of code
   (defun foo (arg) ... ) 
   (ert-deftest test-foo () ... )
   (ert 'test-foo)
)

因为这样可以很容易地编辑函数foo或测试,然后跳到progn和do val-末后性(我已经绑定到C)的末尾。此外,我还经常包装if或和周围,使它很容易禁用一个正在开发的功能。有时使用let*,然后混合,如果特性有变量。

(我使用了其他ert家族跑步者,比如ert运行测试批处理和ert运行测试-交互测试)。但普通的旧ert似乎就足够了。)

(将讨厌和防御放入一个项目或其他一些工具中,这些工具总是处于顶层。)它使多行文档字符串甚至更丑

因此,稍后,我将对另一个模块执行相同的操作。很远。可能在单独的文件中,也可能在库文件中。

代码语言:javascript
复制
(progn     
   ;; some blob of code
   (defun bar (arg) ... ) 
   (ert-deftest test-bar () ... )
   (ert 'test-bar)
)

两个模块都不应该知道另一个模块。

也不应该有一个集中式模块,其中包含所有此类测试的列表,这些测试将在最后运行。

如果仅仅是因为在加载文件的中途可能会出现故障。而且很方便地知道什么测试通过了或者失败了。

(而在最后收集和运行所有测试则失去了增量测试运行能力。)

-++应该是宏

我讨厌重复。在下面的东西里,我讨厌敲三次酒吧。

代码语言:javascript
复制
(progn     
   ;; some blob of code
   (defun BAR (arg) ... ) 
   (ert-deftest test-BAR () ... )
   (ert 'test-BAR)
)

因此,我当然会创建一个宏来减少这种重复。尽管那样的话,寻找ert防御的人们会感到困惑.

-++-++

如果我有

代码语言:javascript
复制
  (ert-deftest test1 ()(should t))
  (ert 'test1)

我会得到一个很好的*ert*缓冲区

代码语言:javascript
复制
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

.

如果以后我有

代码语言:javascript
复制
(ert-deftest test2 () (should t))
(ert 'test2)

它将删除test1在*ert*缓冲区中的输出,并将其替换为

代码语言:javascript
复制
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

.

我想要的是将两个测试的输出连接起来:

代码语言:javascript
复制
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

.
EN

回答 1

Stack Overflow用户

发布于 2017-07-07 22:34:13

正如经常发生的那样,发布问题的行为表明了答案。

虽然它有点丑陋,当然也不标准。因此,如果有人以简洁、标准的方式发表意见,我将接受这样的回答。

国际水文学组织丑恶的方式:

当我这么做

代码语言:javascript
复制
(progn     
   ;; some blob of code
   (defun foo (arg) ... ) 
   (ert-deftest test-foo () ... )
   (ert 'test-foo)
)

我可以添加更多代码来操作ert输出缓冲区:

代码语言:javascript
复制
(progn     
   ;; some blob of code
   (defun foo (arg) ... ) 
   (ert-deftest test-foo () ... )
   (ert 'test-foo)
   ...append `*ert*' contents to `*ert-multiple-independent-tests*'
)

(如果宏化,键入的次数较少)

这是显而易见的。我希望‘`ert’的“自动自我测试”的论点也能达到类似的效果。

代码语言:javascript
复制
ert is an alias for ‘ert-run-tests-interactively’ in ‘ert.el’.

(ert SELECTOR &optional OUTPUT-BUFFER-NAME MESSAGE-FN)

Run the tests specified by SELECTOR and display the results in a buffer.

SELECTOR works as described in ‘ert-select-tests’.
OUTPUT-BUFFER-NAME and MESSAGE-FN should normally be nil; they
are used for automated self-tests and specify which buffer to use
and how to display message.

敷衍了事的调查迄今收效甚微。

我想要一个更好的方法,如果只是因为它可能已经解决了是否在批处理模式下这样做的细节,等等。

或者,如果有人成功地连接了来自独立测试的ert缓冲区,并且成功地创建了一个融合缓冲区,该缓冲区可以简洁地报告所有的情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44980464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档