Maven 플러그인 테스트 - 현대적인 방식 - 6부

previous part of the series - Maven Plugin Testing - In a Modern way - Part V에서 Maven을 실행하기 위해 시스템 속성을 정의하는 방법을 보았습니다. 이 부분에서는 사용할 Maven 호출에 대한 프로필을 정의하는 방법을 자세히 살펴보겠습니다.

이전 부분에서 가져온 간단한 예를 살펴보겠습니다.

@MavenJupiterExtension
class BaseIT {

  @MavenTest
  @MavenGoal("verify")
  void the_first_test_case(MavenExecutionResult result) {
     ...
  }
}

이렇게 하면 Maven이 목표verify로 실행됩니다. 실생활에서 다음과 같은 프로필을 활성화해야만 통합 테스트를 실행하는 것이 합리적일 때가 있습니다.

mvn verify -Prun-its

이제 질문은 다음과 같습니다. 통합 테스팅 프레임워크에서 어떻게 할 수 있습니까?] itf ? 이것은 다음과 같이 @MavenProfile 주석을 사용하여 달성할 수 있습니다.

@MavenJupiterExtension
class BaseIT {

  @MavenTest
  @MavenGoal("verify")
  @MavenProfile("run-its")
  void the_first_test_case(MavenExecutionResult result) {
     ...
  }
}

이렇게 하면 다음 명령줄과의 통합이 실행됩니다.

mvn verify -Prun-its

다음 예제에서는 @MavenProfile 주석이 메서드first에서만 사용되는 것을 볼 수 있습니다.

@MavenJupiterExtension
class BaseIT {

  @MavenTest
  @MavenGoal("verify")
  @MavenProfile("run-its")
  void first(MavenExecutionResult result) {
     ...
  }

  @MavenTest
  void second(MavenExecutionResult result) {
     ...
  }

  @MavenTest
  void third(MavenExecutionResult result) {
     ...
  }
}

프로필이 없는 first를 제외하고 위의 모든 통합 테스트 사례를 실행합니다.
@MavenProfile 주석은 다음과 같이 다른 테스트 케이스 내에서 다른 프로파일을 실행하기 위해 다른 메소드에 넣을 수 있습니다.

@MavenJupiterExtension
class BaseIT {

  @MavenTest
  @MavenGoal("verify")
  @MavenProfile("run-its")
  void first(MavenExecutionResult result) {
     ...
  }

  @MavenTest
  void second(MavenExecutionResult result) {
     ...
  }

  @MavenTest
  @MavenProfile("run-e2e")
  void third(MavenExecutionResult result) {
     ...
  }
}

위의 예는 주어진 프로필third이 명령줄에서 활성화된 테스트 사례run-e2e와 물론 주어진 프로필first이 있는 run-its 테스트 사례를 실행합니다.

다음과 같이 클래스 수준에서 @MavenProfile 주석을 정의하여 달성할 수 있는 동일한 프로필로 많은 통합 테스트를 실행해야 하는 경우가 있습니다.

@MavenJupiterExtension
@MavenProfile("run-its")
class BaseIT {

  @MavenTest
  @MavenGoal("verify")
  void first(MavenExecutionResult result) {
     ...
  }

  @MavenTest
  void second(MavenExecutionResult result) {
     ...
  }

  @MavenTest
  void third(MavenExecutionResult result) {
     ...
  }
}

이렇게 하면 동일한 프로필을 사용하여 세 가지 테스트 케이스를 모두 실행하게 됩니다. 이제 다른 시나리오에 대해 생각해 보겠습니다. 통합 테스트 세트를 정의했습니다(25개라고 가정)
위의 패턴을 기반으로 적절한 테스트 클래스를 만듭니다. 이제 클래스 수준에서 정의된 프로필을 사용하지 않아야 하는 단일 테스트 케이스를 추가해야 합니다. 다른 것을 사용해야 합니다.

이에 대한 두 가지 솔루션이 있습니다. 첫 번째는 클래스 또는 메서드 수준(취향의 문제)에서 적절한 프로필을 정의하는 별도의 통합 테스트 클래스를 만드는 것입니다. 다른 솔루션은 다음 예제와 같이 다른 @MavenProfile 주석이 있는 다른 테스트 케이스 메소드를 정의하는 것입니다.

@MavenJupiterExtension
@MavenProfile("run-its")
class BaseIT {

  @MavenTest
  @MavenGoal("verify")
  void first(MavenExecutionResult result) {
     ...
  }

  @MavenTest
  @MavenProfile("run-somethingdifferent")
  void second(MavenExecutionResult result) {
     ...
  }

  @MavenTest
  void third(MavenExecutionResult result) {
     ...
  }
}

결과는 first 프로필로 테스트 케이스third-Prun-its를 실행하고 second 테스트 케이스는 run-somethingdifferent 프로필로 실행됩니다. 즉, 정의된 프로필을 의미합니다.
가산되지 않습니다. 이 개념의 한계에 대한 예를 보여드리겠습니다. 프로필 없이 second 테스트 케이스를 실행하고 싶다면 이것은 불가능합니다.
이것은 대신 별도의 클래스를 정의해야 하는 솔루션으로 이어집니다.

그 외에도 다음과 같이 Maven 빌드에서 여러 프로필을 정의하는 것이 유용한 경우가 있습니다.

mvn -Prun-its,run-e2e

이것은 다음과 같이 적절한 테스트 케이스(또는 클래스 수준)에서 여러 @MavenProfile 주석을 사용하여 수행할 수도 있습니다.

@MavenJupiterExtension
class BaseIT {

  @MavenTest
  @MavenGoal("verify")
  @MavenProfile("run-its")
  @MavenProfile("run-e2e")
  void the_first_test_case(MavenExecutionResult result) {
     ...
  }
}

따라서 시리즈의 이전 부분을 기반으로 조합을 더 쉽게 만들기 위해 고유한 메타 주석을 정의하는 것이 가능하다는 결론을 내릴 수 있습니다.

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RUNTIME)
@Inherited
@MavenProfile("run-its")
@MavenProfile("run-e2e")
public @interface ExecuteIntegrationAndEndToEnd {
}

이것은 @MavenProfile 주석에 국한되지 않습니다. 시리즈의 이전 기사에서 언급했듯이 @MavenGoal 등과 같은 주석과 결합할 수 있습니다.

이것은 파트 VI에 대한 것입니다. Integration Testing Framework에 대해 더 알고 싶다면 users guide 을 참조하십시오. 릴리스 상태를 알고 싶다면 release notes 을 살펴볼 수 있습니다.

아이디어, 제안 또는 발견된 버그가 있으면 file in an issue on github .

이전 예제를 보여주는 예제 프로젝트는 found on GitHub 입니다.

좋은 웹페이지 즐겨찾기