2011-07-29 4 views
0

내 단위 테스트 중 하나는 테스트 데이터로 구동되며 src/test/resources/testData.txt에 저장됩니다. Maven은 src/test/resources의 내용을 클래스 패스에있는 target/test-classes/에 복사 할 것이므로 클래스 파일에서 절대 파일 이름을 신경 쓰지 않고 편리하게 읽을 수 있습니다. 여태까지는 그런대로 잘됐다.Maven 프로젝트에서 리소스의 경로를 가져올 수있는 이식성이 있습니까?

이제 원격 시스템에서 가져온 데이터로 파일을 업데이트하는 일부 코드를 사용 중입니다. 이 코드는 거의 실행되지 않고 빌드의 일부로 실행되지 않습니다. 갱신 된 파일은 소스 저장소로 커밋됩니다. 파일에 추가하려면 원래 파일의 경로를 src/test/resources에 알려야합니다 (이 파일에 덧붙여서 target/test-classes/이 분명히 작동하지 않음).

경로를 휴대용 방식으로 어떻게 결정합니까? 나는 그 디렉토리 이름이 실제로 바뀔 수 있기 때문에 하드 코드 src/test/resources/을 사용하지 않을 것이다. 또한, 내 프로젝트 기본 디렉토리 이외의 현재 작업 디렉토리로 실행하면 중단됩니다.

아이디어가 있으십니까?

답변

2

가장 좋은 방법은 ${project.basedir}/src/test/resources 일 것입니다. 테스트 리소스 디렉토리는 변경 될 가능성이 없으며 작업 디렉토리와 관계없이 올바른 경로로 안전하게 해결됩니다. 속성을 통해 테스트 리소스 디렉토리를 참조하려고하면 여러 테스트 리소스가 정의되어있을 수 있고 종종 정의되어 있기 때문에 문제가 많습니다. 어떤 것을 골라야하는지 어떻게 알 수 있습니까?

+0

제가 올바르게 이해하고 있는지 확실하지 않습니다. '$ {project.basedir}/src/test/resources'는 괜찮을 것입니다.하지만 어떻게하면'$ {project.basedir}'의 값을 제 코드에서 풀 수 있습니까? –

+1

일반적으로'myFile.path = $ {project.basedir}/src/test ...'와 같은 라인을 가진 테스트와 함께 속성 파일을 가지고 있고, [properties :] 필터 (http : /maven.apache.org/plugins/maven-resources-plugin/examples/filter.html) 빌드 할 때 메이븐에 의해 플러그인 된 정확한 경로를 얻는다. –

+0

Ryan, 저의 문제를 해결하는 데 매우 합리적인 해결책입니다. 그러나 가능한 경우 POM과 함께 빌드 구성을 포함하는 별도의 파일을 유지 관리해야합니다. 귀하의 제안에 영감을 받아 필자는 개인적으로 선호하는 다른 솔루션을 발견했으며 아래에 답변으로 게시 할 것입니다. –

0

내가 선호하는 해결책은 테스트 실행 중에 ${project.basedir}을 환경 변수로 표시하도록 확실한 플러그인을 구성하는 것입니다. 단위 테스트는 필요한 경우 환경에서 해당 정보를 읽을 수 있습니다. 이는 POM의 모든 구성을 유지하고 그 경로가 지금까지 변경해야 변경할 필요가 없습니다 :

<build> 
    <plugins> 
     ... 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      ... 
      <configuration> 
       ... 
       <environmentVariables> 
        <maven.project.basedir>${project.basedir}</maven.project.basedir> 
       </environmentVariables> 
      </configuration> 
     </plugin> 
     ... 
    </plugins> 
</build> 

다른 솔루션은에 ${project.basedir}/src/test/resources/을 추가 (라이언에 의해 제안) 리소스 필터링을 사용하거나 확실한 플러그인을 구성하여 구현 될 수있다 classpath.

+0

설명을 위해 POM에 모든 구성을 유지할 수 있다고 대답했습니다. 단지 표준 속성 파일을 사용하여 테스트에 노출합니다. 속성 파일에 실제 값이 있는지 또는 maven 속성 자리 표시 자로 만 구성되었는지 여부는 귀하에게 달려 있습니다. 특성 파일의 주요 내용은 구성 방법으로서 Java 프레임 워크에 상당히 유비쿼터스 한 것입니다. 어떤 것도 속성 파일을 읽을 수 있습니다. –

관련 문제