1.4. Camel Quarkus Extensions 테스트
테스트에서는 시간이 지남에 따라 Camel 경로가 예상대로 작동하도록 하는 좋은 방법입니다. 아직 Camel Quarkus 사용자 가이드 First Steps 및 Quarkus 설명서 링크:애플리케이션 테스트 섹션을 참조하십시오.
Quarkus에서 경로를 테스트하는 가장 쉬운 방법은 로컬 통합 테스트를 작성하는 것입니다. JVM 및 기본 모드를 모두 다루는 이점이 있습니다.
JVM 모드에서는 테스트의CamelTestSupport 스타일을 사용할 수 있습니다.
1.4.1. JVM 모드에서 실행 링크 복사링크가 클립보드에 복사되었습니다!
JVM 모드에서 @QuarkusTest 주석을 사용하여 Quarkus를 부트스트랩하고 @Test 논리가 실행되기 전에 Camel 경로를 시작합니다.
예를 들면 다음과 같습니다.
Camel Quarkus 소스에서 샘플 구현을 찾을 수 있습니다.
1.4.2. 기본 모드에서 실행 링크 복사링크가 클립보드에 복사되었습니다!
항상 지원되는 모든 확장에 대해 애플리케이션이 기본 모드에서 작동하는지 테스트합니다.
각 JVM 모드 클래스에서 논리를 상속하여 JVM 모드에 대해 정의된 테스트 논리를 재사용할 수 있습니다.
@Quarkus>-<Test 주석을 추가하여 테스트 중인 애플리케이션을 네이티브 이미지로 컴파일하고 테스트를 실행하기 전에 Quarkus JUnit 확장에 알립니다.
Camel Quarkus 소스에서 샘플 구현을 찾을 수 있습니다.
1.4.3. @QuarkusTest 및 @Quarkus 툴과의차이점 링크 복사링크가 클립보드에 복사되었습니다!
네이티브 실행 파일은 실행할 JVM이 필요하지 않으며 바이트 코드가 아닌 네이티브 코드이므로 JVM에서 실행할 수 없습니다.
기존 JVM을 사용하여 실행할 수 있도록 네이티브 코드에 대한 컴파일 테스트는 없습니다.
즉, 테스트와 애플리케이션 간의 통신은 파일 시스템(예: 로그 파일) 또는 기타 프로세스 간 통신을 통해 네트워크(HTTP/REST 또는 애플리케이션에서 사용하는 기타 프로토콜)를 통과해야 합니다.
1.4.3.1. JVM 모드에서 @QuarkusTest 링크 복사링크가 클립보드에 복사되었습니다!
JVM 모드에서 테스트 중인 애플리케이션과 동일한 JVM에서 @QuarkusTest 로 주석이 달린 테스트는 실행합니다.
즉, @Inject 를 사용하여 애플리케이션의 빈을 테스트 코드에 추가할 수 있습니다.
또한 새 빈을 정의하거나 @javax.enterprise.inject.Alternative 및 @javax.annotation.Priority 를 사용하여 애플리케이션에서 빈을 재정의할 수도 있습니다.
기본 모드에서 테스트는 실행 중인 네이티브 애플리케이션과 별도로 호스팅되는 JVM에서 @Quarkus>-<Test 가 실행됩니다.
Quarkus ScanSettingTest 는 @QuarkusTest 를 통해 사용할 수 없는 추가 기능을 제공합니다.
- JVM 모드에서는 Quarkus 빌드에서 생성한 실행 가능 애플리케이션 JAR을 시작하고 테스트할 수 있습니다.
- 기본 모드에서는 Quarkus 빌드에서 생성한 네이티브 애플리케이션을 시작하고 테스트할 수 있습니다.
- 빌드에 컨테이너 이미지를 추가하면 컨테이너가 시작되고 이에 대해 테스트가 실행됩니다.
Quarkus>-<Test 에 대한 자세한 내용은 Quarkus 테스트 가이드를 참조하십시오.
1.4.4. 외부 서비스로 테스트 링크 복사링크가 클립보드에 복사되었습니다!
1.4.4.1. Testcontainers 링크 복사링크가 클립보드에 복사되었습니다!
경우에 따라 애플리케이션에서 메시징 브로커, 데이터베이스 또는 기타 서비스와 같은 일부 외부 리소스에 액세스해야 합니다.
관심 있는 서비스에 컨테이너 이미지를 사용할 수 있는 경우 Testcontainers 를 사용하여 테스트 중에 서비스를 시작하고 구성할 수 있습니다.
1.4.4.1.1. QuarkusTestResourceLifecycleManager로 구성 데이터 전달 링크 복사링크가 클립보드에 복사되었습니다!
애플리케이션이 제대로 작동하려면 시작하기 전에 연결 구성 데이터(호스트, 포트, 사용자, 원격 서비스의 암호)를 애플리케이션에 전달해야 하는 경우가 많습니다.
Quarkus 에코시스템에서 QuarkusTestResourceLifecycleManager 는 이러한 용도로 사용됩니다.
start() 메서드에서 하나 이상의 Testcontainers를 시작하고 Map 형식의 메서드에서 연결 구성을 반환할 수 있습니다.
그러면 이 맵의 항목이 모드에 따라 다양한 방식으로 애플리케이션에 전달됩니다.
-
네이티브 모드: 명령줄 (
-Dkey=value) - JVM 모드: 특수 MicroProfile 구성 공급자
이러한 설정은 application.properties 파일의 설정보다 우선 순위가 높습니다.
@QuarkusTestResource 를 사용하여 테스트 클래스에서 정의된 테스트 리소스를 참조합니다.
Camel Quarkus 소스에서 샘플 구현을 찾을 수 있습니다.
1.4.4.2. WireMock 링크 복사링크가 클립보드에 복사되었습니다!
예를 들어, 테스트에서 라이브 엔드포인트에 연결하는 대신 사용할 수 없거나 신뢰할 수 없거나 비용이 많이 드는 경우 타사 서비스 및 API와 HTTP 상호 작용을 스텁할 수 있습니다.
Mocking & recording HTTP 상호 작용에 WireMock 을 사용할 수 있습니다. 다양한 구성 요소 확장을 위해 Camel Quarkus 테스트 모음 전체에 광범위하게 사용됩니다.
1.4.4.2.1. WireMock 설정 링크 복사링크가 클립보드에 복사되었습니다!
절차
WireMock 서버를 설정합니다.
참고WireMock 프록시를 통해 HTTP 상호 작용을 전달하도록 Camel 구성 요소를 테스트에서 구성하는 것이 중요합니다. API 끝점 URL을 결정하는 구성 요소 속성을 구성하여 이를 수행할 수 있습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고경우에 따라 덜 간단하며 API 클라이언트 라이브러리를 구성하려면 추가 작업이 필요합니다. 예를 들어 Twilio 의 경우.
-
테스트 클래스에 값으로 지정된 적절한 테스트 리소스 클래스를 사용하여
@QuarkusTestResource주석이 있는지 확인합니다.
WireMock 서버는 모든 테스트가 실행되기 전에 시작되고 모든 테스트가 완료되면 종료됩니다.
Camel Quarkus 통합 소스 트리에서 샘플 구현을 확인할 수 있습니다.
1.4.5. CamelQuarkusTestSupport사용 링크 복사링크가 클립보드에 복사되었습니다!
Camel Quarkus 2.13.0 이후 CamelQuarkusTestSupport 를 테스트에 사용할 수 있습니다. CamelTestSupport 를 대체합니다.
이 작업은 JVM 모드에서만 작동합니다.
1.4.5.1. JVM 모드에서 CamelQuarkusTestSupport 로 테스트 링크 복사링크가 클립보드에 복사되었습니다!
모듈에 다음 종속성을 추가합니다(예: 테스트 범위).
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
다음과 같이 테스트에서 CamelQuarkusTestSupport 를 사용할 수 있습니다.
@QuarkusTest
@TestProfile(SimpleTest.class) //necessary only if "newly created" context is required for the test (worse performance)
public class SimpleTest extends CamelQuarkusTestSupport {
...
}
@QuarkusTest
@TestProfile(SimpleTest.class) //necessary only if "newly created" context is required for the test (worse performance)
public class SimpleTest extends CamelQuarkusTestSupport {
...
}
1.4.5.2. CamelQuarkusTestSupport사용 시 제한 사항 링크 복사링크가 클립보드에 복사되었습니다!
'CamelQuarkusTestSupport를 사용할 때 다음과 같은 몇 가지 제한 사항이 있습니다.
1.4.5.2.1. 방법 링크 복사링크가 클립보드에 복사되었습니다!
일부 방법은 실행되지 않습니다. 대신 대신 새 방법으로 시작하는 방법을 사용합니다.
| 실행되지 않음 | 대신 사용 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@TestInstance(TestInstance.Lifecycle.PER_METHOD) 를 사용하는 경우, doAfter 3-4은 각 테스트 전에 콜백을 의미합니다. 이는 이전 모두와 다릅니다.
1.4.5.2.2. 주석 링크 복사링크가 클립보드에 복사되었습니다!
테스트 클래스에 @io.quarkus.test.junit.QuarkusTest 를 추가하고 org.apache.camel.camel.quarkus.test.CamelQuarkusTestSupport 를 확장해야 합니다.
1.4.5.2.3. 시작 및 중지 링크 복사링크가 클립보드에 복사되었습니다!
-
단일 애플리케이션의 라이프사이클 내에서 동일한
CamelContext인스턴스를 중지하고 다시 시작할 수 없습니다.CamelContext.stop()을 호출할 수 있지만CamelContext.start()는 작동하지 않습니다. -
CamelContext는 일반적으로 테스트 시에도 애플리케이션을 시작하고 중지해야 합니다. - 테스트 중인 애플리케이션은 지정된 Maven/Gradle 모듈의 모든 테스트 클래스에 대해 한 번 시작됩니다. Quarkus JUnit Extension은 애플리케이션의 시작 및 중지를 제어합니다. 중지하도록 애플리케이션에 명시적으로 지시해야 합니다.
1.4.5.2.4. 애플리케이션을 다시 시작 링크 복사링크가 클립보드에 복사되었습니다!
Quarkus JUnit Extension이 지정된 테스트 클래스에 대해 애플리케이션 및 CamelContext 를 강제로 다시 시작하려면 고유한 @io.quarkus.test.junit.TestProfile 을 해당 클래스에 할당해야 합니다.
자세한 내용은 Quarkus 설명서의 다양한 프로필 테스트를 참조하십시오.
유사한 효과의 경우 @io.quarkus.test.common.QuarkusTestResource 를 사용할 수도 있습니다.
1.4.5.2.5. 빈 프로덕션 링크 복사링크가 클립보드에 복사되었습니다!
Camel Quarkus는 빌드 단계에서 빈 프로덕션을 실행합니다. 테스트는 함께 빌드되므로 제외 동작이 CamelQuarkusTestSupport 에 구현됩니다. 특정 유형 및 이름의 생산자가 하나의 테스트에서 사용되는 경우 나머지 테스트에 대해 인스턴스가 동일합니다.
1.4.5.2.6. JUnit Jopiter 콜백이 작동하지 않을 수 있습니다. 링크 복사링크가 클립보드에 복사되었습니다!
이러한 JUnit Jopiter 콜백 및 주석은 작동하지 않을 수 있습니다.
| 콜백 | 주석 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
1.4.5.2.7. adviceWith 사용 링크 복사링크가 클립보드에 복사되었습니다!
adviceWith 가 true로 설정되면 모든 수정되지 않은 경로가 시작되지 않습니다. 해당 경로를 시작하려면 CamelQuarkusTestSupport.startRouteDefinitions() 메서드를 실행해야 합니다.
1.4.5.2.8. @Produces사용 링크 복사링크가 클립보드에 복사되었습니다!
재정의된 메서드 createRouteBuilder() 와 함께 @Produces 를 사용합니다. @Produces 및 RouteBuilder() 의 조합이 제대로 작동하지 않을 수 있습니다.
1.4.5.2.9. 경로 구성 링크 복사링크가 클립보드에 복사되었습니다!
애플리케이션을 포함하거나 제외하도록 애플리케이션(ECDHE/main/java)의 경로를 구성하려면 다음을 사용할 수 있습니다.
-
quarkus.camel.routes-discovery.exclude-patterns -
quarkus.camel.routes-discovery.include-patterns
자세한 내용은 Core 설명서 를 참조하십시오.