我无法在Maven中加载JUnit测试的文件

时间:2013-02-06 19:15:59

标签: maven resources junit4 surefire

我知道这里有很多问题和答案,但我已经尝试了所有我读过的内容,你可以肯定它已经很多了。 我正在使用Spring Tool Suite 3.1.0(但还没有Spring),嵌入式Maven 3.0.4和JUnit 4. Ubuntu 12.04。 我有这个JUnit 4测试:

    @Test
public final void testCheckAudio() {
    final InputStream stream = AudioServiceImplTest.class.getResourceAsStream("/test.wav");
    assertNotNull(stream);
}

test.wav在src / test / resources中,我检查过它是否已复制到target / test-classes。 当我运行为... Maven测试我得到: ... 测试失败:testCheckAudio(edu.gerher.askitcollector.test.services.AudioServiceImplTest) ... 无法执行目标org.apache.maven.plugins:maven-surefire-plugin:2.10:test(default-test)on project ...


测试集:MyPackage.AudioServiceImplTest

测试运行:16,失败:1,错误:0,跳过:0,经过的时间:0.039秒<<<失败! testCheckAudio(MyPackage.AudioServiceImplTest)经过的时间:0.005秒<<<失败! java.lang.AssertionError     在edu.gerher.askitcollector.test.services.AudioServiceImplTest.testCheckAudio(AudioServiceImplTest.java:238)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     在java.lang.reflect.Method.invoke(Method.java:597)     在org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)     在org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)     在org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     在java.lang.reflect.Method.invoke(Method.java:597)     在org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)     在org.apache.maven.surefire.booter.ProviderFactory $ ProviderProxy.invoke(ProviderFactory.java:110)     在org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)     在org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)     在org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)

我尝试过“test.wav”,“/ test.wav”,在src / test / resources中创建测试包,并在那里复制文件并尝试“/MyPackage/test.wav”,“MyPackage /test.wav”。总是一样的答案。它无法找到该文件。

我已经尝试过Run as ... JUnit Test和相同的asnwers。 En el pom.xml我有

<build>
...
<resources>
  <resource>
    <directory>.../src/main/resources</directory>
  </resource>
</resources>
<testResources>
  <testResource>
    <directory>.../src/test/resources</directory>
  </testResource>
</testResources>
<directory>.../target</directory>

真的,谢谢你能给我的任何帮助。

3 个答案:

答案 0 :(得分:1)

我不知道它是否仍然相关但是:
假设您在src / test / resources / tree.png下有一个图像。使用标准maven设置,您可以在代码中引用它:

img = ImageIO.read(new File("src/test/resources/tree.png"));

这与当前项目位置有关。

如果将项目打包在jar文件中并希望使用正在运行的代码中的资源,那么还应该查看Java ResourceLoader。这是一个起点:java - how do you make a resourceloader?

答案 1 :(得分:0)

为什么要更改资源位置的Maven默认值?应该“......”指向什么?

我的建议: 1.删​​除自定义资源配置 2.将所需文件放在src / test / resources中 3.用getResourceAsStream(“/ test.wav”);

引用它

答案 2 :(得分:0)

这对我有用。我需要从src / test / resource / WsqImages

中读取图像文件
  File filepath= new File("src" + File.separator + "test" + File.separator
    + "resources" + File.separator + "WSQImages");

    try (InputStream is = new BufferedInputStream(new FileInputStream(
        filepath))) {

    Bitmap bitmap = WSQJavaUtil.getBitMap(IOUtils.toByteArray(is));
    assertNotNull("BitMap Creation faild", bitmap);
    } catch (IOException e) {
    LOG.error(e.getMessage(), e);
    throw new WSQDecompressionException(e.getMessage(), e);

    }