1

Below enum helps me avoid hard-coded directory values at different places in the JUNIT test cases. This seems to work in a development environment inside the IDE on a WINDOW's box.

As soon as I put this code on a LINUX box, the JUNIT classes cannot find the directories. The Files.exists(sourcePath) returns false. The same code had returned true on the IDE (windows). Any pointers on whats going wrong here?

public enum DIRECTORY {

    OUTPUT("resources/output"), RESOURCE("resources/resource"), PROCESSED_OUTPUT(
            "resources/output/resources/resource"), EXPLODED_WEBAPPS(
            "temp/webapps"), WEBAPPS("webapps");

    private String _name;

    private DIRECTORY(String _name) {

        this._name = _name;

    }

    public String getDirectoryName() {
        return _name;
    }

}

Sample usage code of the enum

private void restore_csv_files() {

        Path _processed_output = Paths.get(DIRECTORY.PROCESSED_OUTPUT
                .getDirectoryName());
        Path resource = Paths.get(DIRECTORY.RESOURCE.getDirectoryName());

        FileUtility.copy_files(_processed_output, resource);
        FileUtility.delete_files(_processed_output);
        FileUtility.delete_directory(_processed_output);

    }

File Util class

public static void copy_files(Path sourcePath, Path targetPath) {
        if (Files.exists(sourcePath) && Files.exists(targetPath)) {
            try {
                Files.walkFileTree(sourcePath, new SimpleFileVisitor<Path>() {

                    @Override
                    public FileVisitResult visitFile(final Path file,
                            final BasicFileAttributes attrs) throws IOException {
                        Files.copy(file,
                                targetPath.resolve(sourcePath.relativize(file)));
                        return FileVisitResult.CONTINUE;
                    }
                });
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } else {
            System.out.println("Either Source or Target path does not exist");
        }
    }

Basically on the windows this thing work, but on the linux box, get a sysout "Either Source or Target path does not exist" (refer above code for sysout)

Sample Exception

java.nio.file.NoSuchFileException: webapps/web.war
    at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
    at sun.nio.fs.UnixFileAttributeViews$Basic.readAttributes(UnixFileAttributeViews.java:55)
    at com.temp.utils.FileUtility.alter_date_time_of_file(Unknown Source)
    at com.temp.webengine.WebEngineTest.test_web_app_updated_true(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
TheMonkWhoSoldHisCode
  • 2,182
  • 3
  • 26
  • 40

1 Answers1

5

For File seperator, use System Properties

static String separator = System.getProperty("file.separator");
Kunal Surana
  • 659
  • 5
  • 14