How to get file resource from Maven src/test/resources/ folder in JUnit test?
Maven standard directory layout guide us to place any non-Java files for testing undersrc/test/resources/
folder. They are automatically copied over to target/test-classes/
folder during test phase.
Image you have the following folder layout:
src/ main/ java/ SomeClass.java test/ java/ SomeClassTest.java resources/ sample.txt
The question is how to reach test file resource from JUnit test method.
Test file existence
The basically you should test whether required test file resource does exists:
@Test public void testStreamToString() { assertNotNull("Test file missing", getClass().getResource("/sample.txt")); ... }
Test file to stream
Please note how getResource()
argument value looks. Test class getResource()
will resolve/sample.txt
properly to /target/test-classes/sample.txt
.
You might need to get InputStream
from file resource which is easy to done with help of sister methodgetResourceAsStream()
:
// JDK7 try-with-resources ensures to close stream automatically try (InputStream is = getClass().getResourceAsStream("/sample.txt")) { int Byte; // Byte because byte is keyword! while ((Byte = is.read()) != -1 ) { System.out.print((char) Byte); } }
Test file to File or Path
Common is also to convert resource to java.io.File or its JDK7 successor java.nio.file.Path (from so-called NIO.2). I present Path
example to print last modification time of test resource filesrc/test/resources/sample.txt
:
URL resourceUrl = getClass(). getResource("/sample.txt"); Path resourcePath = Paths.get(resourceUrl.toURI()); FileTime lmt = Files.getLastModifiedTime(resourcePath); // prints e.g. "Tue Jul 09 16:35:51 CEST 2013" System.out.println(new Date(lmt.toMillis()));
출처 - http://devblog.virtage.com/2013/07/how-to-get-file-resource-from-maven-srctestresources-folder-in-junit-test/