292.4. 단위 테스트 Camel 경로


서비스 구성 요소는 POJO이며 (OSGi가 아닌) 단위 테스트에 대한 특별한 요구 사항이 없습니다. 그러나 Camel SCR에 특정한 몇 가지 기술이 있거나 보다 쉽게 테스트를 수행할 수 있습니다.

다음은 camel-archetype-scr 에 의해 생성된 단위 테스트 예제입니다.

// This file was generated from org.apache.camel.archetypes/camel-archetype-scr/2.15-SNAPSHOT
package example;

import java.util.List;

import org.apache.camel.scr.internal.ScrHelper;
import org.apache.camel.builder.AdviceWithRouteBuilder;
import org.apache.camel.component.mock.MockComponent;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.model.ModelCamelContext;
import org.apache.camel.model.RouteDefinition;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

@RunWith(JUnit4.class)
public class CamelScrExampleTest {

    Logger log = LoggerFactory.getLogger(getClass());

    @Rule
    public TestName testName = new TestName();

    CamelScrExample integration;
    ModelCamelContext context;

    @Before
    public void setUp() throws Exception {
        log.info("*******************************************************************");
        log.info("Test: " + testName.getMethodName());
        log.info("*******************************************************************");

        // Set property prefix for unit testing
        System.setProperty(CamelScrExample.PROPERTY_PREFIX, "unit");

        // Prepare the integration
        integration = new CamelScrExample();
        integration.prepare(null, ScrHelper.getScrProperties(integration.getClass().getName()));
        context = integration.getContext();

        // Disable JMX for test
        context.disableJMX();

        // Fake a component for test
        context.addComponent("amq", new MockComponent());
    }

    @After
    public void tearDown() throws Exception {
        integration.stop();
    }

    @Test
    public void testRoutes() throws Exception {
        // Adjust routes
        List<RouteDefinition> routes = context.getRouteDefinitions();

        routes.get(0).adviceWith(context, new AdviceWithRouteBuilder() {
            @Override
            public void configure() throws Exception {
                // Replace "from" endpoint with direct:start
                replaceFromWith("direct:start");
                // Mock and skip result endpoint
                mockEndpoints("log:*");
            }
        });

        MockEndpoint resultEndpoint = context.getEndpoint("mock:log:foo", MockEndpoint.class);
        // resultEndpoint.expectedMessageCount(1); // If you want to just check the number of messages
        resultEndpoint.expectedBodiesReceived("hello"); // If you want to check the contents

        // Start the integration
        integration.run();

        // Send the test message
        context.createProducerTemplate().sendBody("direct:start", "hello");

        resultEndpoint.assertIsSatisfied();
    }
}

 

이제, 흥미로운 비트를 하나씩 살펴보겠습니다.

속성 접두사 사용

        // Set property prefix for unit testing
        System.setProperty(CamelScrExample.PROPERTY_PREFIX, "unit");

이를 통해 속성의 앞에 "unit"을 추가하여 구성 부분을 덮어쓸 수 있습니다. 예를 들어 unit.from 은 단위 테스트를 위해 에서 재정의됩니다.

경로를 실행할 수 있는 런타임 환경 간의 차이점을 처리하는 데 접두사를 사용할 수 있습니다. 개발, 테스트 및 프로덕션 환경을 통해 변경되지 않은 번들을 이동하는 것이 일반적인 사용 사례입니다.

 

주석에서 테스트 구성 가져오기

        integration.prepare(null, ScrHelper.getScrProperties(integration.getClass().getName()));

여기서는 OSGi 환경에서 사용되는 것과 동일한 속성을 사용하여 테스트에서 서비스 구성 요소를 구성합니다.

 

테스트를 위한 주요 구성 요소

        // Fake a component for test
        context.addComponent("amq", new MockComponent());

테스트에서 사용할 수 없는 구성 요소는 다음과 같이 감소하여 경로를 시작할 수 있습니다.

 

테스트를 위해 경로 조정

        // Adjust routes
        List<RouteDefinition> routes = context.getRouteDefinitions();

        routes.get(0).adviceWith(context, new AdviceWithRouteBuilder() {
            @Override
            public void configure() throws Exception {
                // Replace "from" endpoint with direct:start
                replaceFromWith("direct:start");
                // Mock and skip result endpoint
                mockEndpoints("log:*");
            }
        });

Camel의 AdviceWith 기능을 사용하면 테스트를 위해 경로를 수정할 수 있습니다.

 

경로 시작

        // Start the integration
        integration.run();

여기에서 서비스 구성 요소를 시작하고 해당 경로와 함께 라우팅을 시작합니다.

 

테스트 메시지 보내기

        // Send the test message
        context.createProducerTemplate().sendBody("direct:start", "hello");

여기에서 우리는 테스트의 경로에 메시지를 보냅니다.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat
맨 위로 이동