2016-07-05 3 views
1

Я создал апачскую службу верблюда остального для запроса данных из БДАJunit Пример теста для Apache верблюжьей службы

.get("/{id}/CodeId").description("get the CodeId").outType(String.class) 
       .id("CodeId").param().name("codeid").type(RestParamType.path).description("Getting Id") 
       .dataType("string").endParam().route() 
       .to("sql:select * from table1 where C_ID=:#${header.codeid} ") 
       .process(new Processor() { 

        @Override 
        public void process(Exchange ex) throws Exception { 
         String JId = null; 
         try { 
          List<HashMap> version = (List<HashMap>) ex.getIn().getBody(); 
          if (version != null && version.size() > 0) { 
           LOG.debug(
             "jId------------------------------>" + version.get(0).get("J_ID")); 
           JId = (String) version.get(0).get("J_ID"); 
          } 

          ex.getIn().setBody(JId, String.class); 
          ex.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, 201); 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
        } 
       }).endRest(); 

На самом деле он работает нормально, но я не был в состоянии писать тесты JUnit для службы.

Может ли кто-нибудь предложить мне способ написать тестовый пример Junit для проверки значений из службы?

+0

Вы прочитали документацию https://camel.apache.org/testing.html? –

+0

Да, я прочитал документ, но не смог получить правильный метод. –

+0

. Одна вещь, которую вы могли бы сделать, - поместить всю логику трубы в «прямой» и выполнить этот маршрут, используя стандартную поддержку тестирования от верблюда. –

ответ

1

Вы можете использовать любой клиент HTTP (например, верблюд HTTP)

class RestDemoTest extends CamelTestSupport { 
    override def createRouteBuilder(): RouteBuilder = new RestDslRoutes() 

    @Test 
    def smokeTest(): Unit ={ 
    val body: String = template.requestBodyAndHeader("http://localhost:9898/demo/status","",Exchange.HTTP_METHOD, "GET", classOf[String]) 
    org.junit.Assert.assertThat(body,Is.is("Running")) 
    } 

} 

Пример кода находится в Скале, но я уверен, что вы получите идею

EDIT: согласно образец запроса с получения издеваться:

class RestDemoTest extends CamelTestSupport { 
    override def createRouteBuilder(): RouteBuilder = new RestDslRoutes() 

    // This example uses auto mocking endpoints based on a pattern 
    override def isMockEndpointsAndSkip: String = "sql:*" 

    @Test 
    def mockDemo(): Unit = { 
    // Obtain auto-created mock endpoint (false indicates: don't create if it does not exist yet. Helps with typos 
    val mockEndpoint: MockEndpoint = getMockEndpoint("mock:sql:update foo set bar=10",false) 
    // Set expectations/behaviour etc 
    mockEndpoint.expectedMessageCount(1) 

    val body: String = template.requestBody("http://localhost:9898/demo/update", "", classOf[String]) 

    /// assert expectations/behaviour 
    mockEndpoint.assertIsSatisfied() 
    } 
+0

@ Спасибо за то, что он отлично работает –

+0

Возможно, вы захотите отметить это как ответ в этом случае. Спасибо –

+0

, если я использую приведенный выше код в junit для службы обновлений, он обновит таблицу, поскольку он вызывает бэкэнд. У вас есть какие-либо идеи для тестирования службы обновлений. –

1

на самом деле я документированное все вокруг блока тестов здесь:

http://bushorn.com/unit-testing-apache-camel/

http://bushorn.com/camel-unit-testing-using-mock-endpoint/

В вашем сценарии, что вы должны сделать, вы должны заменить независимо отдохнуть от конечной точки в маршруте с прямой конечной точкой. Таким образом, вы можете отправить любую полезную нагрузку из вашего тестового примера. Его всегда хорошая практика для того, чтобы сделать эти тесты единичных тестовых случаев агностиками. Смысл не включает в себя REST, JMS, STOMP или любые внешние вызовы в корпусах вашего устройства, таким образом вы можете сосредоточиться, чтобы проверить только свою логику маршрутизации. Тестирование уровня протокола, которое вы можете в любом случае охватить при тестировании интеграции.

Cheers.

Смежные вопросы