使用多个测试导演Java / Maven

时间:2017-06-07 10:53:28

标签: java maven junit

我有一个Java项目,它在资源上有多个测试导演。

\target\test-classes
                   |___conf
                   |      |_ items...
                   |___otherdata
                          |_ items...

我需要访问它的根\target\test-classes,所以我可以在目录之间切换,因为测试用例一次使用BOTH目录中的文件。

尝试:

File targetClassesDir = new File(getClass().getProtectionDomain().getCodeSource().getLocation().getPath());
File targetDir = targetClassesDir.getParentFile();

getClass().getResource("test-classes").getPath()

但尚未访问test-classes的根目录。

我构建了一个非常糟糕的解决方法......:

tuple4TestsuiteContainer.add(new HeaderBodyPayloadTestcase(
                                    "conf\\" + xqueries[0],
                                    getClass().getResource("/").getPath(),
                                    "xquery-testdata\\" + file.substring(file.lastIndexOf(File.separatorChar) + 1),
                                    "xquery-testdata\\" +expectedFiles[0].substring(expectedFiles[0].lastIndexOf(File.separatorChar) + 1)
                            ));

并在实际的测试人员中:

String xqueryFileContent = readFile(testDataBasePath + xQueryUnderTestPath, encoding);

3 个答案:

答案 0 :(得分:1)

我不确定是否能够正确理解您的问题。如果在运行中的java中尝试更改目录,则可以执行以下操作:

    public class Main {
            public static void main(String args[]) {
                    String[] s = { "c:\\some\\place\\cdexe.exe",
                    "c:\\start\\dir", "c:\\my\\batch\\file.bat", "arg1", "..." };
                    try {
                            java.lang.Runtime.getRuntime().exec(s);
                    } catch (java.io.IOException e) {
                            e.printStackTrace();
                    }
            } }

如果有帮助,请告诉我,希望更多地了解您的问题。

答案 1 :(得分:1)

我也不确定您的用例和项目设置(Maven?),但在我看来,您根本不应显式访问目标/测试类中的任何文件,并使用资源文件夹中的ClassLoader加载资源

How to get the path of src/test/resources directory in JUnit?

答案 2 :(得分:0)

我不确定我是否正确理解你的问题。我假设你需要访问一些数据(资源)。 如果在maven步骤期间将资源复制到目标目录,那么您可以通过类似

之类的代码在代码中获取此资源的路径(例如测试)
String resrouce = "data/bla/blub.txt";
String pathToResource = URLDecoder.decode(this.getClass().getResource(resource).getFile(), "UTF-8");