camel azure blob容器的单元测试用例

j0pj023g  于 2022-11-23  发布在  Apache
关注(0)|答案(1)|浏览(156)

我有一个路径,它只会获取文件并将其上传到blob容器。有人能帮助我用不同的方法为这个路径编写单元测试吗?

from("direct:uploadFileToBlob")
        .routeId("uploadFile")
        .setHeader("CamelAzureStorageBlobSourceBlobAccountName",constant(storageAccountName))
        .log(LoggingLevel.INFO,"Connecting To Container Name: ${header.CamelAzureStorageBlobContainerName}")
        .log(LoggingLevel.INFO,"Connecting To Account Name: ${header.CamelAzureStorageBlobSourceBlobAccountName}")
        .toD("azure-storage-blob://${header.CamelAzureStorageBlobSourceBlobAccountName}/${header.CamelAzureStorageBlobContainerName}?blobName=${header.CamelFileName}&operation=uploadBlockBlob&serviceClient=#serviceClient")
        .log(LoggingLevel.INFO,"${header.CamelFileName} Uploaded to ${header.CamelAzureStorageBlobContainerName} Container Successfully")
        .end();
k2fxgqgv

k2fxgqgv1#

你已经在你的另一个问题中得到了一些答案。甚至在那里添加了一些代码示例来帮助测试文件的路径,尽管使用了更通用的CamelTestSupport而不是Spring注解。

重点测试路由逻辑,而不是camel组件或外部服务

编写camel单元测试时,需要了解的关键一点是,您应该专注于测试路由逻辑,而不是camel组件。维护camel的人员已经为camel及其大多数可用组件编写了大量单元测试。
为了避免单元测试过于复杂,了解不同级别的测试及其范围和目的是很有好处的。

测试级别

1.单元测试
1.集成测试
1.系统测试
1.验收测试
你可以从各种在线文章以及维基百科中找到更多关于它们的信息。

测试azure-storage-blob路由

当涉及到只将文件发送到blob存储或类似的路由时,通常没有太多的业务逻辑需要测试。您应该测试的是azure-storage-blob端点是否实际接收到文件。此外,您可能有业务需求要求您在发送之前验证文件(即内容是否有效,文件/blob名称是否遵循所需的命名约定等)。
1.测试azure-storage-blob端点是否接收文件
1.测试azure-storage-blob端点是否接收到有效数据。

  • 测试路由是否记录错误或在不记录错误时引发适当异常
  • 如果正在使用监视功能,则可能需要使用某种特定格式的错误消息,以便警报等工作。
  • 测试无效数据不会发送到azure-storage-blob端点
  • 测试Azure记录错误或正确异常的连接错误。
  • 这些对于系统和集成测试非常有帮助,如果集成配置、防火墙等存在问题,可以稍后进行这些测试。

由于您的路线具有一些依赖性,如标题:

  • CamelAzure存储斑点源斑点帐户名称
  • CamelAzure储存Blob容器Name
  • Camel 文件名

"你可以试试"

  1. azure-storage-blob端点在给定时接收这些标头
    1.如果缺少这些头中任何一个,路由将记录错误或抛出适当的异常。
    对于这些测试,您可以使用adviceWith和weave来替换使用weaveByURI或weaveByID和replace的azure-storage-blob端点。
    示例
context.adviceWith(context.getRouteDefinition("uploadFile"), 
    new AdviceWithRouteBuilder(){

            @Override
            public void configure() throws Exception {
                
                weaveByToUri("azure-storage-blob:*")
                    .replace()
                    .to("mock:azure-storage-blob");
            }
        }
    );

MockEndpoint azureBlobStorageMockEndpoint = getMockEndpoint("mock:azure-storage-blob");
azureBlobStorageMockEndpoint.expectedMessageCount(1);
azureBlobStorageMockEndpoint.message(0)
        .header(Exchange.FILE_NAME).isEqualTo("TestFile.json");

InputStream body = fetchFileFromResourcesFolderAsStream("test-files/TestFile.json");
Map<String, Object> headers = new HashMap<>();
headers.put(Exchange.FILE_NAME, "TestFile.json");

startCamelContext();
template.sendBodyAndHeaders("direct:start", body, headers);

azureBlobStorageMockEndpoint.assertIsSatisfied();

这些测试只需要对您的实际路由进行最少的修改,因为它们只是测试在提供特定输入的情况下,路由何时产生预期的输出。

相关问题