Testing ';右';在Clojure中运行单元测试的方法
目前,我在编码会话开始时在REPL中定义了以下函数:Testing ';右';在Clojure中运行单元测试的方法,testing,clojure,Testing,Clojure,目前,我在编码会话开始时在REPL中定义了以下函数: (defn rt [] (let [tns 'my.namespace-test] (use tns :reload-all) (cojure.test/test-ns tns))) 每次我进行更改时,我都会重新运行测试: user=>(rt) 这对我来说效果还算不错。当我删除一个测试时,我必须重新启动REPL并重新定义有点烦人的方法。此外,我还听到过关于像这样使用use函数的坏消息。因此,我的问题是: 这样使
(defn rt []
(let [tns 'my.namespace-test]
(use tns :reload-all)
(cojure.test/test-ns tns)))
每次我进行更改时,我都会重新运行测试:
user=>(rt)
这对我来说效果还算不错。当我删除一个测试时,我必须重新启动REPL并重新定义有点烦人的方法。此外,我还听到过关于像这样使用use
函数的坏消息。因此,我的问题是:
- 这样使用
会给我带来麻烦吗use
- 有没有比我现在做的更惯用的工作流
lein test
形成不同的终端。这保证了文件中的内容是经过测试的内容,而不是内存中的内容。如果您更改了函数名,但仍在某处调用旧名称,则使用“全部重新加载”可能会导致错误通过
- 像这样调用
本身并不是问题,它只是限制您在测试中使用更多名称空间时不会有任何名称冲突。只要你有一个,就可以了李>use
- 使用lein,您可以指定单元,并使用测试选择器功能轻松地分组运行它们李>
- 我也在REPL中运行测试。我喜欢这样做,因为我对测试有更多的控制,而且由于JVM已经在运行,所以速度更快。然而,就像你说的,很容易陷入麻烦。为了把事情弄清楚,我建议看一看
特别是,您可以使用
重新加载在live repl中更改的文件。还有clojure.tools.namespace.repl/refresh
来重新加载类路径上的所有文件 我在我的refresh all
中向我的~/.lein/profiles.clj
概要文件添加tools.namespace,这样每个项目都有它。然后,当您运行:dev
时,它将包含在类路径中,但不会泄漏到项目的适当依赖项中leinrepl
当我在进行测试时,我要做的另一件事是要求它进入我的REPL并手动运行它。测试只是一个没有参数的函数,所以您可以这样调用它们。到目前为止,我对它印象深刻$lein midje:自动测试
启动clojure进程,监视src和测试文件,重新加载关联的名称空间,并运行与更改的文件相关的测试(跟踪依赖项)。我将它与VimShell一起使用,以在vim中打开一个分割缓冲区,并同时打开源代码和测试文件。我对其中一个进行了更改,并且(相关)测试将在拆分窗格中执行。我开始运行测试时使用了
,但是与在REPL中运行测试相比,这些测试运行的时间要长得多。这是预期的还是我做错了?、speclj和midje都支持监视文件更改并自动运行测试(除了第一次加载外,速度很快)。如果您使用emacs,它有一个clojure测试模式,在repl上运行emacs中的测试,这非常酷lein test