복붙노트

[SPRING] 클래스 패스가 아닌 의존성의 테스트 리소스?

SPRING

클래스 패스가 아닌 의존성의 테스트 리소스?

Maven을 사용하여 설정 한 다중 모듈 Spring 프로젝트가있다.

my-root (pom)
    - my-logic
    - my-webapp (depending on my-logic)
    - my-consoleapp (depending on my-logic)

My Test 클래스는 AbstractTransactionalJUnit4SpringContextTests에서 상속 받고 @ContextCofiguration을 사용하여 ApplicationContext를 설정합니다.

예 : Spring Controller를위한 테스트 클래스 :

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { 
  "classpath:applicationContext-logic-test.xml",
  "classpath:applicationContext-web-test.xml"})
public class ControllerTest extends AbstractTransactionalJUnit4SpringContextTests {

  @Autowired
    private ApplicationContext applicationContext;
    ...
}

보시다시피 모듈마다 설정 XML이 있습니다. 필자는 각 모듈의 테스트 / 리소스에 상주하는 테스팅을위한 별도의 configs를 가지고있다 (그리고 접미사 "-test"를 갖는 additionaly). Eclipse에서 JUnit 테스트를 실행하면이 모든 것이 작동합니다 (클래스가 컴파일되고 실행되며 JUnit 테스트가 성공적입니다).

이제 내 문제 : Maven을 사용하여 테스트를 실행해도 작동하지 않습니다! (예 : my-root에서 "Run As"> "Maven install"을 사용하여 (m2eclipse를 사용)). 특히 다음과 같은 예외가 throw됩니다.

Maven은 my-webapp의 단위 테스트를 실행할 때 설정되는 classpath에 my-logic / src / test / resources의 파일을 추가하지 않는 것 같습니다.

어떻게 해결할 수 있습니까?

해결법

  1. ==============================

    1.아니, 실제로, 그렇지 않습니다. 첫째, Maven은 로컬 저장소를 통해 항상 해결되는 바이너리 종속성을 사용합니다. 둘째, 바이너리 종속성에는 테스트 항목이 포함되지 않습니다.

    아니, 실제로, 그렇지 않습니다. 첫째, Maven은 로컬 저장소를 통해 항상 해결되는 바이너리 종속성을 사용합니다. 둘째, 바이너리 종속성에는 테스트 항목이 포함되지 않습니다.

    하지만 당신이 할 수있는 일은 :

    # 1의 경우, my-logic의 pom.xml에 Maven Jar Plugin을 설정해야한다.

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

    그리고 Maven은 패키지 중에 타겟 / 테스트 클래스의 내용으로 JAR 파일을 만들고 설치 / 전개 할 것이다.

    # 2의 경우 my-webapp의 pom.xml에서 테스트 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>
    

    그렇게해야합니다.

  2. ==============================

    2.그건 의도적으로입니다. 테스트 리소스는 출력 아티팩트에 포함되지 않으므로 의존하는 무언가의 테스트 종속성은 유닛 테스트 클래스 경로에서도 액세스 할 수 없습니다.

    그건 의도적으로입니다. 테스트 리소스는 출력 아티팩트에 포함되지 않으므로 의존하는 무언가의 테스트 종속성은 유닛 테스트 클래스 경로에서도 액세스 할 수 없습니다.

    수행하려는 작업을 수행하려면 테스트에 필요한 리소스가 들어있는 프로젝트를 만들어 my-logic과 my-webapp의 테스트 범위 종속성으로 만들어야합니다

  3. from https://stackoverflow.com/questions/3571149/test-resources-of-dependencies-not-in-classpath by cc-by-sa and MIT license