当前位置: 首页 > 知识库问答 >
问题:

使用fixture从REPL运行一个Clojure测试(不是命名空间中的所有测试)

阙星渊
2023-03-14

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

我尝试过直接调用函数,例如(ns/测试),但我需要先运行fixture。所以我想找到一种从clojure开始测试的方法。测试

这很接近,但不匹配我想做的:https://stackoverflow.com/a/24337705/109618

我看不到clojure有提到怎么做。测试API。

共有3个答案

广绪
2023-03-14

如果您不介意不运行fixture,可以在调用运行测试之前执行以下操作:

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

要去掉钩子,你可以做

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

如果您仍然需要fixture并希望保留一个测试命名空间,则可以添加一个ns unmap,在运行基于以下内容建模的测试之前,从命名空间中删除所有不希望运行的测试/fixture:

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

使用多个命名空间可能更容易,其中一个包含所有测试和固定装置,在其他命名空间中,引用到您想要从主测试命名空间运行的测试和固定装置。然后,您可以使用ns切换到特定的测试命名空间,或者通过要测试的命名空间:

(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

文嘉禧
2023-03-14

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

lein test :only namespace_name/testname

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

lein test :only namespace_name
子车成和
2023-03-14

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

我认为这样做应该奏效:

(clojure.test/test-vars [#'the-ns/the-test])
 类似资料:
  • 作为Clojure的新手,我使用leiningen创建了一个示例项目 它给了我这个目录 在不修改任何文件的情况下,我可以使用 但是我无法使用运行测试从REPL做同样的事情 我试过(但不起作用)

  • 我知道怎么说 但如何指定多个? 这似乎只是随机运行一个测试。 这告诉我 在根项目“MyProject”中找不到任务“MyPackage.Model.ModelTest”。 我读了很多手册和教程(和一些SO帖子),但没有找到明确的答案。但是我看到有人通过-tests“somePackage.*”作为参数,所以我想空格周围的引号可能会有帮助。 这不会很快失败,但不幸的是,它只运行列表中的第一个测试。

  • 从excel文件读取测试数据。要求:我想首先我的所有测试应该运行在相同的测试数据,即excel行,然后所有测试与另一行。 解决方案:尝试将@Factory与我的@DataProvider一起使用 问题:如果我在@dataProvider中使用核心值,那么它可以正常工作。但是当从excel动态获取时,如果给我错误:[错误]导致:java.lang.NullPointerException } 基类

  • 我一直在设置一些合约JUnit 4测试(遵循回答这个问题的建议) - 例如,如果我有一个接口(我已经在示例中包含了泛型,因为我在我的项目中使用它们) - 但是,这是一个大大简化的示例: 我可以创建一个抽象的合同测试,例如: ...并为每个实现扩展此抽象测试类(我使用。我还将一些变量传递给抽象测试类,以测试接口的实现。 然而,实际上,一些接口返回的对象是其他接口的实现,我希望能够使用该接口的抽象契约

  • 我有一个Java应用程序,它使用Gradle作为构建系统。这是多项目构建(几个Java项目)。 当我运行时,有些测试失败了,我注意到并不是所有的测试都在运行。 如果我将以下代码添加到中,它确实会运行所有测试,但当然,构建的代码总是成功完成: 我有两个问题: gradle是否在第一次失败后停止执行测试? 是否有一种方法可以运行所有测试(即使在一些测试失败时),并且如果其中一些测试失败,构建的测试仍然

  • 类似于这个问题。然而,当使用ddt时,公认的解决方案不适用于我。 例如: 如果我在终端上运行这个,它就不起作用了