【问题标题】:Run one Clojure test (not all tests in a namespace), with fixtures, from the REPL从 REPL 运行一个带有固定装置的 Clojure 测试(不是命名空间中的所有测试)
【发布时间】:2014-09-18 04:49:18
【问题描述】:

如何从 Clojure REPL 运行一个测试(而不是整个命名空间)?

我试过直接调用函数,例如(the-ns/the-test) 但我需要先运行固定装置。所以我想找到一种方法从clojure.test开始测试。

这很接近但不符合我想要做的事情: https://stackoverflow.com/a/24337705/109618

我在clojure.test API 中没有看到任何关于如何做到这一点的提及。

【问题讨论】:

    标签: testing clojure read-eval-print-loop


    【解决方案1】:

    如果您不介意不运行灯具,您可以在致电run-tests 之前执行以下操作:

    (defn test-ns-hook []
      (my-test))
    

    要去掉钩子,你可以这样做

    (ns-unmap *ns* 'test-ns-hook)
    

    如果您仍然需要您的固定装置并希望保留一个测试命名空间,您可以添加一个ns-unmap 以删除您不想在命名空间中运行的所有测试/固定装置,然后再运行您模拟的测试:

    (doseq [v (keys (ns-publics 'my-ns))]
      (let [vs (str v)]
        (if (.startsWith vs "test-") (ns-unmap 'my-ns v))))
    

    使用多个命名空间可能更容易,其中一个包含您的所有测试和夹具,而在其他命名空间refer 中,您希望从主测试命名空间运行测试和夹具。然后,您可以使用 ns 切换到特定的测试命名空间或传递 run-tests 要测试的命名空间:

    (ns test-main
      (:require [clojure.test :refer :all]))
    
    (deftest addition
      (is (= 4 (+ 2 2)))
      (is (= 7 (+ 3 4))))
    
    (deftest subtraction
      (is (= 1 (- 4 3)))
      (is (= 3 (- 7 4))))
    
    (run-tests)
    ;Runs all the tests
    
    (ns test-specific
    (:require [clojure.test :refer :all]
              [test-main :refer :all]))
    
    (deftest arithmetic
      (subtraction))
    
    (run-tests)
    ;Just runs the tests you want
    

    【讨论】:

      【解决方案2】:

      Clojure 1.6 中添加了一个新函数来支持这一点。 clojure.test/test-vars 将使用固定装置运行一个或多个测试变量。

      我认为这样的事情应该可行:

      (clojure.test/test-vars [#'the-ns/the-test])
      

      【讨论】:

      【解决方案3】:

      在命名空间中运行单个测试:

      lein test :only namespace_name/testname
      

      在一个命名空间中运行所有测试

      lein test :only namespace_name
      

      【讨论】:

        【解决方案4】:

        clojure.test 的一个不错的替代方案(如果您可以添加其他依赖项,请使用 eftest)。这个库是一个替代运行器(它与 clojure.test 兼容)。它具有灵活的测试选择器(即按文件夹、按命名空间、按 var)。

        在 REPL 中,您可以执行如下操作:

        (require '[eftest.runner :refer [find-tests run-tests]]) (run-tests (find-tests #'foo.bar/baz))

        https://github.com/weavejester/eftest

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-02-13
          • 1970-01-01
          • 1970-01-01
          • 2014-12-11
          • 2023-03-28
          • 1970-01-01
          • 2011-08-07
          相关资源
          最近更新 更多