Junit 테스트 내에서 Maven 속성을 검색하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/247346

  •  05-07-2019
  •  | 
  •  

문제

파일 파서 클래스에 대한 테스트를 작성하고 있습니다. 구문 분석 메소드는 파일 이름을 매개 변수로 수신하고 구문 분석하려면 파일 이름을 열어야합니다 (DUH).

Test 파일을 작성하여 프로젝트 디렉토리의 테스트/리소스 디렉토리에 넣고이 파일을 전달하여 구문 분석을 테스트하고 싶습니다. 이 프로젝트는 CVS에 있으며 다른 사람들이 조작 할 것이므로 파일 경로를 하드 코딩 할 수 없으므로 Maven $ {basedir} 속성을 사용하여 테스트에서 파일 이름을 작성하는 것에 대해 생각했습니다. 같은 것 :

public void parseTest() {
    ...
    sut.parse( ${basedir} + "src/test/resources/testFile" );
    ...
}

누군가 내가 어떻게 이것을 달성 할 수 있는지 알고 있습니까?

도움이 되었습니까?

해결책

두 가지 옵션이 있습니다.

1) 시스템 속성을 통해 파일 경로를 테스트로 전달합니다 (문서)

POM에서 다음과 같은 작업을 수행 할 수 있습니다.

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.4.2</version>
        <configuration>
          <systemProperties>
            <property>
              <name>filePath</name>
              <value>/path/to/the/file</value>
            </property>
          </systemProperties>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

그런 다음 테스트에서 할 수 있습니다.

System.getProperty("filePath");

2) 파일을 SRC/Test/Resources 내부에 테스트 클래스와 동일한 패키지 아래에 넣습니다. 그런 다음 class.getResourceasstream (String filename)을 사용하여 파일로 이동할 수 있습니다.문서).

옵션 2 Over Option 1을 강력히 추천합니다. 시스템 속성을 통해 테스트에 물건을 전달하는 것은 매우 더러운 IMO입니다. 그것은 당신의 테스트를 불필요하게 테스트 러너와 결합시키고 길을 따라 두통을 일으킬 것입니다. 클래스 경로에서 파일을로드하는 것은 갈 길이며 Maven은 리소스 디렉토리의 개념을 갖는 이유입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top