2017-10-17 10 views
0

J'ai eu un problème similaire avec une route un peu plus simple: Camel NotifyBuilder always returns falseCamel état NotifyBuilder échoue

Mon itinéraire est le suivant:

PerfTestRouteBuilder

@Component 
public class PerfTestRouteBuilder extends SpringRouteBuilder { 

    /* (non-Javadoc) 
    * @see org.apache.camel.builder.RouteBuilder#configure() 
    */ 
    @Override 
    public void configure() throws Exception { 
     from("direct:test-input") 
     .log("Creating test response object") 
     .process(exchange -> { 
      WOutputAccnLayout stubResponse = new WOutputAccnLayout(); 
      stubResponse.setWOutAccnAccNum("AB999999999"); 
      stubResponse.setWOutAccnCallStatus("SUCCESS"); 
      exchange.getIn().setBody(stubResponse, WOutputAccnLayout.class); 
     }) 
     .log("Test response object created: ${body}") 
     .end(); 
    } 
} 

Et je le test suivant :

PerfTestRouteBuilderIT

public class PerfTestRouteBuilderIT extends CamelTestSupport { 

    @Override 
    protected RouteBuilder createRouteBuilder() { 
     return new PerfTestRouteBuilder(); 
    } 

    @Before 
    public void setup() throws Exception { 
     super.setUp(); 
    } 

    @Test 
    public void test_configure_exchangeSentToTestRoute_stubResponseAddedToBody() throws Exception { 
     startCamelContext(); 
     NotifyBuilder notify = new NotifyBuilder(context) 
       .from("direct:test-input") 
       .whenAnyDoneMatches(body().isEqualTo(getStubResponse())) 
       .create(); 

     template.sendBody("direct:test-input", ""); 

     assertThat(notify.matches(5, TimeUnit.SECONDS), is(true)); 

     stopCamelContext(); 
    } 

    private WOutputAccnLayout getStubResponse() { 
     WOutputAccnLayout stubResponse = new WOutputAccnLayout(); 
     stubResponse.setWOutAccnAccNum("AB999999999"); 
     stubResponse.setWOutAccnCallStatus("SUCCESS"); 
     return stubResponse; 
    } 

} 

La condition Evalue toujours comme faux et je ne vois pas pourquoi, compte tenu de la méthode getStubResponse retourne un objet mis en place exactement comme il serait sur la route. La dernière fois, la solution consistait à utiliser template.sendBody, ou à créer un échange via le point de terminaison de la route et à l'utiliser, et aucune des deux approches n'a fonctionné jusqu'à présent. Est-ce quelque chose autour de la façon dont j'utilise le kit de test de chameau?

+2

Est-il peut-être la mise en œuvre equals() de l'objet WOutputAccnLayout? – ltsallas

+0

bon point, se penchera sur – jbailie1991

+0

Oui, essayé un assertEquals sur le corps et la réponse stub, échoué en raison de la façon dont .equals est mis en œuvre. Malheureusement, c'est une classe générée, donc je ne peux pas changer la mise en œuvre égale, mais au moins je sais que ce n'est pas le notifybuilder – jbailie1991

Répondre

0

selon le commentaire de Itsallas, question était tombé à la mise en œuvre de .equals pour objet utilisé dans l'affirmation