2011-12-19 117 views
1

为什么此测试失败,并显示“java.lang.AssertionError:mock:// destino Received message count。Expected:< 12> but was:< 0>”?我只是想测试骆驼是否真的可以重新排列消息。使用MockEndpoint测试骆驼路由

进口:

import java.util.ArrayList; 
import java.util.List; 

import org.apache.camel.CamelContext; 
import org.apache.camel.Produce; 
import org.apache.camel.ProducerTemplate; 
import org.apache.camel.builder.RouteBuilder; 
import org.apache.camel.component.mock.MockEndpoint; 
import org.apache.camel.guice.CamelModuleWithRouteTypes; 
import org.jukito.JukitoModule; 
import org.jukito.JukitoRunner; 
import org.junit.Test; 
import org.junit.runner.RunWith; 

import com.google.inject.Inject; 

测试:

@RunWith(JukitoRunner.class) public class ResequenceTest { 

    @Inject protected CamelContext context; 
    @Produce protected ProducerTemplate template; 

    public static class Module extends JukitoModule { 
     @SuppressWarnings("unchecked") protected void configureTest() { 
      install(new CamelModuleWithRouteTypes(OrderingTestRouteBuilder.class)); 
     } 
    } 

    @Test public void testDozenMsgsOrderByIntegerBody() throws Exception { 
     // fail(); 
      Integer[] input = new Integer[] {12, 11, 10, 9, 8, 7, 6, 5, 1, 2, 3, 4}; 
      List<Integer> expectedOutput = new ArrayList<Integer>(); 
     for (int i=1; i<=12; i++) {expectedOutput.add(i);}; 
     for (Integer i : input) {template.sendBody("mock:receptor", i);}; 
     MockEndpoint resultEndpoint = context.getEndpoint("mock:destino", MockEndpoint.class); 
     resultEndpoint.expectedBodiesReceived(expectedOutput); 
     resultEndpoint.assertIsSatisfied(); 
    } 

} 

路线:

class OrderingTestRouteBuilder extends RouteBuilder { 
     @Override public void configure() throws Exception { 
     from("direct:start") 
      .to("mock:receptor") 
      .resequence(body(Integer.class)) 
      .to("mock:destino"); 
    } 
} 

感谢, 鲁道夫

回答

4

,您应该设置的期望上你可以在之前模拟向骆驼发送消息。这些步骤是

  1. 在嘲笑
  2. 设置期望发送消息
  3. 断言
+0

是的,我今天早上意识到这点。谢谢,克劳斯。 – Rodolfo 2011-12-19 12:53:28

1

它传递了。我改变了测试:

@Test public void testDozenMsgsOrderByIntegerBody() throws Exception { 
    // fail(); 
    List<Integer> input = Arrays.asList(new Integer[] {12, 11, 10, 9, 8, 7, 6, 5, 1, 2, 3, 4}); 
    List<Integer> expectedOutput = new ArrayList<Integer>(); 
    for (int i=1; i<=12; i++) {expectedOutput.add(i);}; 
    MockEndpoint resultEndpoint = context.getEndpoint("mock:result", MockEndpoint.class); 
    resultEndpoint.expectedBodiesReceived(expectedOutput); 
    for (Integer i : input) {template.sendBody("direct:start", i);}; 
    resultEndpoint.assertIsSatisfied(); 
} 

和路线:

class OrderingTestRouteBuilder extends RouteBuilder { 
@Override 
public void configure() throws Exception { 
    from("direct:start") 
     .resequence(body(Integer.class)) 
     .to("mock:result"); 
    } 
}