构建器 - 将测试资源放在类路径上

时间:2012-03-10 15:30:33

标签: java classpath buildr concordion

我正在尝试使用buildr来构建我的Java项目。我有一堆协调测试和HTML规范,如下所示:

src/test/java/spec/x/y/z/SomethingTest.java
src/test/resources/spec/x/y/z/Something.html

buildr找到实际的测试代码(SomethingTest.java)并运行它,但HTML不会在类路径上结束,因此测试失败。我收到以下错误:

[junit] Testcase: [Concordion Specification for 'Something'] took 0.002 sec
[junit]     Caused an ERROR
[junit] Resource '[classpath: /x/y/z/Something.html]' not found
[junit] java.io.IOException: Resource '[classpath: /x/y/z/Something.html]' not found
[junit]     at org.concordion.internal.ClassPathSource.createInputStream(ClassPathSource.java:15)
[junit]     at org.concordion.internal.XMLSpecificationReader.readSpecification(XMLSpecificationReader.java:25)
[junit]     at org.concordion.Concordion.process(Concordion.java:30)
[junit]     at org.concordion.Concordion.process(Concordion.java:26)
[junit]     at org.concordion.internal.FixtureRunner.run(FixtureRunner.java:18)
[junit]     at org.concordion.integration.junit4.ConcordionRunner$1.evaluate(ConcordionRunner.java:113)
[junit]     at org.concordion.integration.junit4.ConcordionRunner.runChild(ConcordionRunner.java:104)
[junit]     at org.concordion.integration.junit4.ConcordionRunner.runChild(ConcordionRunner.java:18)
[junit] 
[junit] TEST x.y.z.SomethingTest FAILED

我的buildfile如下:

repositories.remote = 'http://www.ibiblio.org/maven2'

JODA = 'joda-time:joda-time:jar:2.0'
CONCORDION = 'org.concordion:concordion:jar:1.4.2'
XERCES = 'xerces:xercesImpl:jar:2.8.1'
XOM = 'xom:xom:jar:1.2.5'

define 'my-project' do
  project.version = '0.0.1'
  compile.with JODA
  test.with XERCES, XOM, CONCORDION
  package :jar
end

我尝试使用Java.classpath << 'src/test/resources/x/y/z'test.resources.include上的变体强制将HTML文件放到类路径上,但无济于事。我确定我只是遗漏了一些简单的东西。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

默认情况下,Buildr使用mavens分离源代码和资源的约定。因此,需要将测试资源放在“src / test / resources”目录中。

答案 1 :(得分:0)

确保你正在使用 this.getClass()。getClassLoader()。getResourceAsStream([你的网址]);

而不仅仅是新文件([您的网址]);

请参阅http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/ClassLoader.html#getResourceAsStream%28java.lang.String%29

答案 2 :(得分:0)

Buildr理论上应该将资源复制到<project-dir>/target/test/resources并在运行测试时将其包含在类路径中。检查此目录是否存在,如果存在,是否为空。

发生此问题时是否正在运行Eclipse?如果是这样,这可能是buildr和eclipse之间的冲突。尝试关闭Eclipse,然后运行buildr cleanbuildr test

我见过类似的问题,我的理论是Eclipse一旦删除就会创建空目标目录,例如Buildr。然后,Buildr检查目标目录的时间戳,并发现它比任何源资源更新,并且认为它必须是最新的。因此,任何创建空目标资源目录的程序理论上都可能导致此问题。