How to get the path of src/test/resources directory in JUnit?
I know I can load a file from src/test/resources with:
getClass().getResource("somefile").getFile()
But how can I get the full path to the src/test/resources directory, i.e. I don't want to load a file, I just want to know the path of the directory?
Solution 1:
You don't need to mess with class loaders. In fact it's a bad habit to get into because class loader resources are not java.io.File objects when they are in a jar archive.
Maven automatically sets the current working directory before running tests, so you can just use:
File resourcesDirectory = new File("src/test/resources");
resourcesDirectory.getAbsolutePath()
will return the correct value if that is what you really need.
I recommend creating a src/test/data
directory if you want your tests to access data via the file system. This makes it clear what you're doing.
Solution 2:
Try working with the ClassLoader
class:
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("somefile").getFile());
System.out.println(file.getAbsolutePath());
A ClassLoader
is responsible for loading in classes. Every class has a reference to a ClassLoader
. This code returns a File
from the resource directory. Calling getAbsolutePath()
on it returns its absolute Path
.
Javadoc for ClassLoader
: http://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html