Maven에서 테스트 코드 공유


183

Maven의 다른 모듈의 테스트 코드에 어떻게 의존 할 수 있습니까?

예를 들어 2 개의 모듈이 있습니다.

  • 베이스
  • 본관

Main의 테스트 사례를 Base의 기본 테스트 클래스로 확장하고 싶습니다. 이게 가능해?

업데이트 : 테스트 항아리 만들기와 관련된 적절한 대답을 찾았습니다 .


1
실제로 아래에 더 큰 답변에 대한 메모 인 아래의 허용 된 답변의 조합에 해당하는 답변이 이제 Maven 사이트에 있습니다. 테스트 클래스를 포함하는 jar 작성 방법
David Tonhofer

답변:


189

내가 사용하는 것이 좋습니다 대신 분류의 유형 (참조 : 분류를 ). 그것은 Maven에게 당신이하고있는 일을 좀 더 명확하게 알려줍니다 (그리고 나는 m2eclipse와 q4e가 더 좋아한다는 것을 알았습니다).

<dependency>
  <groupId>com.myco.app</groupId>
  <artifactId>foo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>

5
com.myco.app에 대해 별도의 테스트 항목 유형에 대해 별도의 종속성 항목이 있어야합니까?
노아 왓킨스

20
또한 maven-jar-plugin 구성에 test-jar을 추가해야합니다. maven.apache.org/guides/mini/guide-attached-tests.html
user1338062

11
이 답변을 처음 읽을 때 혼란 스러웠습니다 ... 실제로 그 자체로는 이해가되지 않기 때문에 먼저 아래 답변을 읽어야합니다. stackoverflow.com/questions/174560/…
TanguyP

179

기본 모듈 제안에 감사드립니다. 그러나이 목적을 위해 새 모듈을 만들지 않습니다.

Surefire Maven 설명서블로그 에서 적절한 답변을 찾았습니다 . " 테스트 클래스를 포함하는 jar 작성 방법 "도 참조하십시오 .

이것은 테스트를 가진 모듈이 코드를 공유 할 수 있도록 jar 플러그인src/test/java사용하여 jar 코드 파일을 작성 합니다.

<project>
  <build>
    <plugins>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-jar-plugin</artifactId>
       <version>2.4</version>
       <executions>
         <execution>
           <goals>
             <goal>test-jar</goal>
           </goals>
         </execution>
       </executions>
     </plugin>
    </plugins>
  </build>
</project>

위에서 작성된 첨부 된 테스트 JAR을 사용하려면 지정된 테스트 분류 자로 기본 아티팩트에 대한 종속성을 지정하십시오.

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>com.myco.app</groupId>
      <artifactId>foo</artifactId>
      <version>1.0-SNAPSHOT</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>
  </dependencies>
  ...
</project> 

14
종속성에서 <classifier> tests </ classifier를 사용하는 데 문제가있을 수 있습니다. 대신 <type> test-jar </ type>을 사용하십시오. 다음은 Maven jira.codehaus.org/browse/MNG-2045 의 한 가지 문제 와 IntelliJ의 관련이없는 문제입니다. youtrack.jetbrains.net/issue/IDEA-54254
Emil Sit

그것은 나에게 매우 유용했지만 문제를 발견했다 : "install -Dmaven.test.skip = true"를 실행할 때, 의존성 test-jar가 필요하고 프로세스가 실패한다
Javi Pedrera

@ JaviPedrera 'mvn clean install -DskipTests = true'를 수행해도 테스트가 실행됩니다. 오류 없음
Karussell

1
@Allen 용기를 포장하는 동안 ServiceResultTransformer를 사용해야합니까? 그렇지 않으면 서비스 파일이 서로 겹쳐 쓰여질 수 있습니다.
jontejj

1
maven.apache.org/plugins/maven-shade-plugin/examples/… 여기에서 자세한 내용을 읽을 수 있습니다.
jontejj

12

테스트 코드를 src / main / java로 maven 프로젝트를 만들고 프로젝트에 다음과 같은 종속성을 추가하여이를 해결했습니다.

    <dependency>
        <groupId>foo</groupId>
        <artifactId>test-base</artifactId>
        <version>1</version>
        <scope>test</scope>
    </dependency>

그래, 그게 효과가 있었어, 고마워! 내가 선호하는 대체 답변에 대해서는 아래의 의견을 참조하십시오.
깜박임

1
우리는이 접근법도 사용합니다. 분류 자 ​​또는 유형 (대부분의 사용자에게는 Maven에서 거의 기본이 아님)을 사용해야하며 실제로 필요하지 않을 때 약간의 노력으로 JAR을 빌드해야합니다. 또는 (이 경우와 마찬가지로) 테스트 코드의 기본으로 사실상 테스트되지 않은 코드가 있습니다.
virgo47

-3

그렇습니다 ... 기본 모듈을 Main의 종속성으로 포함하십시오. 테스트 코드 만 상속하는 경우 scope 태그를 사용하여 Maven이 배포 할 때 이슈에 코드를 포함시키지 않도록 할 수 있습니다. 이와 같은 것이 작동해야합니다.

<dependency>
    <groupId>BaseGroup</groupId>
    <artifactId>Base</artifactId>
    <version>0.1.0-SNAPSHOT</version>
    <scope>test</scope>
</dependency>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.