2012-01-30 7 views
1

완료시 CSV 파일을 "쓰는"작업과 관련된 Maven 프로젝트를 만들었습니다.Maven 유닛 테스트 FileNotFound 오류

28 Jan 2012 11:17:51,499 main DEBUG main.executors.ReportsExecutor:111 - Finished processing documents in 0.0 hours 
28 Jan 2012 11:17:51,516 main ERROR main.utilities.FileWriterObject:279 - writeToADelimitedFile: reports/reportResults_1_28_2012_11.17.515.csv (No such file or directory) APPEND VALUE: false 
28 Jan 2012 11:17:51,517 main ERROR main.executors.ReportsExecutor:170 - java.io.FileNotFoundException: reports/reportResults_1_28_2012_11.17.515.csv (No such file or directory) 
java.io.FileNotFoundException: reports/reportResults_1_28_2012_11.17.515.csv (No such file or directory) 
    at java.io.FileOutputStream.open(Native Method) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:179) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:102) 
    at java.io.FileWriter.<init>(FileWriter.java:61) 
    at 
다음 "MVN 패키지"또는 "MVN 테스트"명령을 사용할 때, 내 단위 테스트를 실행할 때

가 나는 "모의/테스트"보고서 파일을 생성하는 테스트 클래스를 생성하지만,이 오류가 발생합니다

"APPEND VALUE : false"출력은 FileWriter 생성자의 "append"부울 매개 변수가 false라는 디버그 문으로, 해당 파일로 새 파일을 "만들려면"입니다. 이름.

이제 제작 과정에서 제대로 작동합니다. 그것은 작동하지 않는 단지 단위 테스트입니다. 내가 구성하지 않고있는 "루트 테스트"디렉토리가 있습니까?

저는 Maven에게 아주 친숙합니다. 어떤 의견이라도 대단히 감사합니다!

+0

관련 코드 스 니펫 ('writeToADelimitedFile')을'FileWriterObject'에 게시 할 수 있습니까? maven이 파일을 만들 수없는 것 같습니다. – Raghuram

답변

1

Maven은 단위 테스트에서 사용하기 편리한 "basedir"이라는 속성을 설정합니다. 나는 빠른 단위 테스트를 작성하고이 이클립스 모두 받는다는과 나를 위해 작동 :

public class ReadAndWriteToTargetDirectoryTest extends Assert { 

    public static final String TEST_STRING = "Testing"; 

    @Test 
    public void testReadWrite() { 
     File file = new File(System.getProperty("basedir", ".") + File.separator + "target", "mavenTest.txt"); 

     try { 
      FileWriter writer = new FileWriter(file); 
      System.out.println("File: " + file.getCanonicalPath()); 
      writer.write(TEST_STRING); 
      writer.close(); 

      BufferedReader reader = new BufferedReader(new FileReader(file)); 
      String line = reader.readLine(); 
      reader.close(); 
      assertTrue(line.equals(TEST_STRING)); 
     } catch (IOException e) { 
      fail(e.getMessage()); 
     } 
    } 
} 

얻을은 System.getProperty (...)를 사용하는 경우 "기본 디렉토리"시스템 속성은 기본 매개 변수를 설정해야합니다 ~ "." 당신은뿐만 아니라 이클립스에서 단위 테스트를 실행할 수 있도록 :

System.getProperty("basedir", ".") 
+0

환경 indepentend가되기 위해서는 표준 Java 속성 [user.dir] (http://docs.oracle.com/javase/7/docs/api/java)도 사용할 수 있어야합니다. /lang/System.html#getProperties%28%29) – FrVaBe

+0

배포 된 응용 프로그램에 "대상"하위 디렉토리가 없으므로이 작업이 도움이되지 않습니다. 이것이 배포 된 서버에서이 오류를받지 못하는 이유입니다. 테스트를 실행하여 빌드 서버에서 로컬로 또는 "mvn test"를 통해 각각의 파일을 작성하려고 할 때만 가능합니다. – Rick

+0

@Rick 죄송합니다. 도움이되지 않았습니다. 나는 당신이 묻는 것과 혼동스러워합니다. – BenjaminLinus

0

그것은 내가 명령을 실행했던에서보다, 디렉토리에 "상대"서로의 테스트를 실행하기 위해 메이븐을 말할 수 없다처럼 보인다 "mvn 테스트."

"프로젝트"루트 디렉토리의 "상대"디렉토리에있는 파일에 쓰려고하면 Java 클래스, 즉 쓰기를 수행하는 디렉토리가 있어야합니다. 해당 디렉토리가 있는지 확인하십시오. 그것을 쓰기 전에.

원래이 작업을 수행하지 않은 이유는 내 ant-deployment.xml 파일이 내 구현, 즉 대상/로그, 대상/리소스 등에 필요한 필요한 디렉토리를 구축했기 때문입니다. 배포 된 앱을 실행해도이 문제는 발생하지 않습니다.

나는 maven에게 "mvn -Dbase.dir = target test"라고 말할 수 있기를 바랬지만 분명히 할 수 없었습니다.