2013-09-25 35 views
0

我正在处理一个包含Java类和Clojure文件的项目。目标是使用java测试Clojure文件。尝试在cljunit中获取名称空间的var名称时出错

我使用Cljunit为了这个目的:https://github.com/mikera/cljunit

我使用的代码是下一个:

public class DemoClojureTest extends ClojureTest { 
@Override 
       public List<String> namespaces() { 
        @SuppressWarnings("unused") ArrayList<String> ns=new ArrayList<String>(); 
        ns.add("com.example.demo.helloWorld"); 
        return ns; 
       } 

    } 

而且Clojure的文件(helloWorld.clj)是:

(ns com.example.demo.helloWorld 
    (:use clojure.test)) 

(deftest test1 
    (is (= 1 3))) 

(deftest test2 
    (is (= 2 2))) 

当我尝试执行DemoClojureTest时出现此错误:

错误atte命令空间获取var名称[com.example.demo.helloWorld]

java.io.FileNotFoundException: Could not locate com/example/demo/helloWorld__init.class or com/example/demo/helloWorld.clj on classpath: 
    at clojure.lang.RT.load(RT.java:432) 
    at clojure.lang.RT.load(RT.java:400) 
    at clojure.core$load$fn__4890.invoke(core.clj:5415) 
    at clojure.core$load.doInvoke(core.clj:5414) 
    at clojure.lang.RestFn.invoke(RestFn.java:408) 
    at clojure.core$load_one.invoke(core.clj:5227) 
    at clojure.core$load_lib.doInvoke(core.clj:5264) 
    at clojure.lang.RestFn.applyTo(RestFn.java:142) 
    at clojure.core$apply.invoke(core.clj:603) 
    at clojure.core$load_libs.doInvoke(core.clj:5298) 
    at clojure.lang.RestFn.applyTo(RestFn.java:137) 
    at clojure.core$apply.invoke(core.clj:603) 
    at clojure.core$require.doInvoke(core.clj:5381) 
    at clojure.lang.RestFn.invoke(RestFn.java:408) 
    at mikera.cljunit.core$get_test_var_names.invoke(core.clj:67) 
    at clojure.lang.Var.invoke(Var.java:415) 
    at mikera.cljunit.Clojure.getTestVars(Clojure.java:29) 
    at mikera.cljunit.NamespaceTester.<init>(NamespaceTester.java:19) 
    at mikera.cljunit.ClojureTester.<init>(ClojureTester.java:21) 
    at mikera.cljunit.ClojureRunner.<init>(ClojureRunner.java:16) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29) 
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:44) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 

我在做什么错了?

+0

这是一个Java项目或者您在使用La Clojure吗? – Jared314

+0

@ Jared314 La Clojure插件安装在IDE(IntelliJ)中,但我不知道这个项目是否使用了它。 –

+1

这听起来像是一个Intellij特定的类路径问题。 clojure源文件夹是否被设置为“sources”文件夹? – Jared314

回答

2

从堆栈跟踪中,它看起来像IntelliJ测试运行器要么在不包含Clojure源文件的类路径中运行测试,要么不包含它们在构建中。

确保您的Clojure文件所在的文件夹位于模块设置中的“内容根目录”下并标记为“来源”或“测试来源”文件夹。

相关问题