【问题标题】:java.lang.AssertionError: Issue with Camel Mock Endpointjava.lang.AssertionError:骆驼模拟端点问题
【发布时间】:2022-01-06 22:50:02
【问题描述】:

我遇到了骆驼路线模拟的问题。它无法计算路由消息,而是返回“0”消息计数。这是我的测试用例和路线。有人可以帮助我吗?

WatcherRouteTest.java

@CamelSpringBootTest
@SpringBootTest
@MockEndpoints
@UseAdviceWith
public class RouteTest {

  @Autowired
  CamelContext camelContext;

  @Autowired
  ProducerTemplate producerTemplate;

  File resultFile;

  @EndpointInject("mock:azure-storage-blob")
  MockEndpoint storageMockEndpoint;


  @Test
  void testFlow() throws Exception {

    AdviceWith.adviceWith(camelContext, "uploadFile", a ->
        a.replaceFromWith("direct:start")
    );

    storageMockEndpoint.expectedMessageCount(1);
    storageMockEndpoint.message(0)
        .header(Exchange.FILE_NAME).isEqualTo("text.csv");

    InputStream body = fetchFileFromResourcesFolderAsStream("test-files/text.csv");
    Map<String, Object> headers = new HashMap<>();
    headers.put(Exchange.FILE_NAME, "text.csv");
    headers.put("CamelAzureStorageBlobContainerName","abc");
    headers.put("header.CamelAzureStorageBlobSourceBlobAccountName","abcd");

    camelContext.start();
    producerTemplate.sendBodyAndHeaders("direct:start", body, headers);

    storageMockEndpoint.assertIsSatisfied();

    resultFile = fileCreationUtility( "text.csv");
    assertTrue(resultFile.exists());

  }
}

这是我的实际实现:

from("direct:upload")
        .routeId("uploadFile")
        .setHeader("CamelAzureStorageBlobSourceBlobAccountName",constant(storageAccountName))
        .toD(BLOB_URL)
        .log(LoggingLevel.INFO,"${header.CamelFileName} Uploaded to ${header.CamelAzureStorageBlobContainerName} Container Successfully")
        .end();

发生异常:

java.lang.AssertionError: mock://azure-storage-blob Received message count. Expected: <1> but was: <0>
Expected :<1>
Actual   :<0> 

【问题讨论】:

    标签: java spring-boot apache-camel azure-blob-storage


    【解决方案1】:

    在解决方法上尝试以下解决方案

    解决方案 1): 在将消息发送到 Camel 之前,您应该在 mock 上设置期望值。步骤是

    1.设置对模拟的期望

    2。发送消息

    3.断言

    示例:

    @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");
        }
    }
    

    更多详情请参考SO Thread:

    解决方案 2) AssertionError 抱怨这两个对象实例不相等,这是显而易见的,因为它们不是同一个实例。

    其中一个是在您的应用程序中创建的,另一个是在您的测试用例中创建的。

    而且错误也可能是由于示例中的请求正文:HTML 模板。尝试使用错误的 HTML 模板断言它会引发 AssertionError 错误

    更多详情请参考SO Thread:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      相关资源
      最近更新 更多