Testing ';右';在Clojure中运行单元测试的方法

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函数的坏消息。因此,我的问题是: 这样使

目前,我在编码会话开始时在REPL中定义了以下函数:

(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已经在运行,所以速度更快。然而,就像你说的,很容易陷入麻烦。为了把事情弄清楚,我建议看一看

      特别是,您可以使用
      clojure.tools.namespace.repl/refresh
      重新加载在live repl中更改的文件。还有
      refresh all
      来重新加载类路径上的所有文件

      我在我的
      ~/.lein/profiles.clj
      中向我的
      :dev
      概要文件添加tools.namespace,这样每个项目都有它。然后,当您运行
      leinrepl
      时,它将包含在类路径中,但不会泄漏到项目的适当依赖项中


      当我在进行测试时,我要做的另一件事是要求它进入我的REPL并手动运行它。测试只是一个没有参数的函数,所以您可以这样调用它们。

      到目前为止,我对它印象深刻

      $lein midje:自动测试
      


      启动clojure进程,监视src和测试文件,重新加载关联的名称空间,并运行与更改的文件相关的测试(跟踪依赖项)。我将它与VimShell一起使用,以在vim中打开一个分割缓冲区,并同时打开源代码和测试文件。我对其中一个进行了更改,并且(相关)测试将在拆分窗格中执行。

      我开始运行测试时使用了
      lein test
      ,但是与在REPL中运行测试相比,这些测试运行的时间要长得多。这是预期的还是我做错了?、speclj和midje都支持监视文件更改并自动运行测试(除了第一次加载外,速度很快)。如果您使用emacs,它有一个clojure测试模式,在repl上运行emacs中的测试,这非常酷