Java 将文件从单元测试保存到项目树
在单元测试中,作为一个副作用,我正在为GUI的各个部分创建屏幕截图。 我想在编译文档时使用这些屏幕截图 因此,我想将它们保存到源代码树中的一个目录中 在运行junit测试时,是否有可靠的方法获取源目录根Java 将文件从单元测试保存到项目树,java,eclipse,unit-testing,maven,junit,Java,Eclipse,Unit Testing,Maven,Junit,在单元测试中,作为一个副作用,我正在为GUI的各个部分创建屏幕截图。 我想在编译文档时使用这些屏幕截图 因此,我想将它们保存到源代码树中的一个目录中 在运行junit测试时,是否有可靠的方法获取源目录根 如果没有,我如何确保在使用eclipse和maven时,单元测试以cwd=project root运行?无论是在eclipse上执行测试还是在使用maven执行测试,如果在创建文件时未指定路径,它将在project root目录下自动创建 因此,如果您指定相对文件夹,您的文件将转到该文件夹: p
如果没有,我如何确保在使用eclipse和maven时,单元测试以cwd=project root运行?无论是在eclipse上执行测试还是在使用maven执行测试,如果在创建文件时未指定路径,它将在project root目录下自动创建 因此,如果您指定相对文件夹,您的文件将转到该文件夹:
public class TestFileCreation {
@Test
public void testFileCreation() throws IOException {
File f = new File("src/main/resources/hello.txt");
OutputStream ostream = new FileOutputStream(f);
String data = "Hello there !";
ostream.write(data.getBytes());
ostream.close();
}
}
将在$PROJECT/src/main/resources内创建一个文件
希望我的答案对你有所帮助你可以根据你所在的班级位置。这里建议的解决方案是使用肯定位于类路径中的类。然后可以使用
class.getResource(“”
)。范例
public class ResouceRoot {
public static String get() {
String s = ResouceRoot.class.getResource("").toString();
if (s.startsWith("jar:")) {
s = s.replace("jar:", "").replaceAll("!.*", "");
} else {
s = s.replaceAll("classes.*", "classes");
}
File f = new File(s.replace("file:", ""));
return f.getParentFile().getParentFile().getAbsolutePath();
}
public static void main(String[] args) throws IOException {
System.out.println(get());
}
}
(如果netbeans项目是从netbeans或通过
java-jar…
)启动的,那么这段代码将为netbeans项目提供base dir)谢谢,我已经选择了这个方向。我正在检查目录是否存在,以确保我位于正确的位置。