gpt4 book ai didi

java - 设置我使用 Clojure 对纯 Java 库进行单元测试的环境

转载 作者:行者123 更新时间:2023-11-29 04:38:58 24 4
gpt4 key购买 nike

我必须编写一个纯 Java 库。但我想使用 Clojure 对其进行单元测试。

所以我想设置这样的东西:两个项目存储库。 Java 代码本身,以及包含该库并对其运行单元测试的第二个 Leiningen 项目。

我做 TDD,所以这是一个相当紧凑的迭代(即编写测试,编写代码以通过它)。我可以在 Emacs 中同时打开两个项目的代码,但我想知道如何自动连接。

例如,理想情况下,每当我进行“lein test”时,它都会抓取最新的 Java 代码,编译它(如果未编译),将它拉入 Clojure 项目并在测试。

我怎样才能做到这一点?我目前有 Lein project.clj 文件引用本地 Maven 存储库中的 Java 库。但是我不确定 Lein 是否会自动从 Maven 更新,除非版本号发生变化,而且我认为我不想为代码库的每一次更改/每 2 或 3 次更新版本编号分钟。 (至少,肯定不是手动的。)

有人有这方面的经验吗?

最佳答案

您可以使用简单的 Java 互操作来做到这一点。您根本不应该对本地文件(java 或 clojure)使用 maven,仅对外部库使用。

这是一个示例:

Java代码:

~/xpr > tree
.
└── src
└── samp
└── HelloMain.java

> cat src/samp/HelloMain.java
package samp;
public class HelloMain {
public static void hello() {
System.out.println("Hello There"); }}

Clojure 代码:

 > cat project.clj 
(defproject clj "0.1.0-SNAPSHOT"
:dependencies [
[org.clojure/clojure "1.9.0-alpha13"]
]
:java-source-paths ["/home/alan/xpr/src"]
:main ^:skip-aot clj.core
:target-path "target/%s"
)

> cat test/tst/clj/core.clj
(ns tst.clj.core
(:use clj.core
clojure.test )
(:import [samp.HelloMain])
)

(println "begin" )
(samp.HelloMain/hello)
(println "end" )

运行:

> lein test
(:repositories detected in user-level profiles! [:user]
See https://github.com/technomancy/leiningen/wiki/Repeatability)
Compiling 1 source files to /home/alan/clj/target/base+system+user+dev+test+test/classes
begin
Hello There
end

lein test user

Ran 0 tests containing 0 assertions.
0 failures, 0 errors.

因此,clojure 编译器通过 project.clj

中的条目引用了 java 源代码
:java-source-paths ["/home/alan/xpr/src"]

当您运行 lein test 时,它会将 java 源文件与它缓存的已编译 java *.class 文件进行比较,并在必要时重新编译 java 源文件。如果我们做出改变

“你好”->“你好,又来了!”在 java 源代码中,我们得到:

 > lein test
(:repositories detected in user-level profiles! [:user]
See https://github.com/technomancy/leiningen/wiki/Repeatability)
Compiling 1 source files to /home/alan/clj/target/base+system+user+dev+test+test/classes
begin
Hello, again!
end

lein test user

Ran 0 tests containing 0 assertions.
0 failures, 0 errors.

于是lein检测到源文件变化,重新编译了java源文件。


更新

我有a template project使用混合的 Clojure/Java 源代码。只需克隆它,您就可以参加比赛了!

关于java - 设置我使用 Clojure 对纯 Java 库进行单元测试的环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40045605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com