【问题标题】:JUnit and Clojure unit testingJUnit 和 Clojure 单元测试
【发布时间】:2011-06-18 06:02:22
【问题描述】:

我正在创建一个包含 Clojure 和 Java 代码的库,并且希望能够在整个代码库中运行单个测试 JUnit 套件。似乎这应该是可能的,因为它们都在 JVM 上运行并且有很好的 Clojure/Java 互操作。

不过,目前 Clojure 代码似乎更倾向于使用“(run-all-tests)”和朋友通过 clojure.test API 完成的单元测试。

有没有一种好方法可以将这些 Clojure 测试包装在某种包装器中,以便可以从 JUnit 中自动调用它们?

(当我说自动时,我的意思是不求助于编写 JUnit 测试用例来单独包装和调用每个 Clojure 测试用例的手动解决方案 :-))

【问题讨论】:

  • 我可能会倾向于 leiningen 上的 maven
  • 您可以轻松地为此设置 maven.. 以 this question 开头..

标签: java unit-testing testing clojure junit


【解决方案1】:

最简单的做法是从单个 JUnit 测试中调用 run-all-tests。您可以捕获输出并查看指示通过/失败/错误计数的最后一行。如果您看到失败或错误,您可以使 JUnit 测试失败。

但是,如果您想与每个 Clojure 测试进行交互,则必须实现与 clojure.test 中的功能类似的功能。也就是说,对于每个命名空间中的每个值,查找存储在 :test 元数据值中的函数。该值是您的测试函数。

test.clj 的第 661-686 行很好地概括了测试是如何存储以及随后在 Clojure 中运行的。

【讨论】:

    【解决方案2】:

    目前不存在我所知道的 JUnit 集成。除了按照@psyllo 的建议从单个 JUnit 测试中调用 run-all-tests 之外,您还可以构建更彻底的集成,如下所示:

    1. 构建一个函数,为 clojure 中定义的每个测试方法生成一个 junit.framework.Test 实例。查看clojure.test/test-ns 了解如何找到所有测试方法。
    2. 创建一个junit.framework.TestSuite 的实例,为某个ns 添加所有生成的测试,然后AOT 编译这个套件类。
    3. 您可以从 java/junit 调用套件类。

    【讨论】:

      猜你喜欢
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多