模拟构建类AWS Logs客户端构建器

问题描述 投票:0回答:1

我正在尝试模拟并使用AWS buildin类。但不断得到不同的错误。

当我测试一个完整的方法时,我能够模拟所有其他方法,但是当使用when时,它会抛出异常。

 BasicAWSCredentials basic = new BasicAWSCredentials(clientToken, clientSecret);
  //Forming AWSLogs
 AWSLogs awsLogsClient = AWSLogsClientBuilder
            .standard()
            .withCredentials(new AWSStaticCredentialsProvider(basic))
            .withRegion(region)
            .build();

 DescribeLogStreamsRequest logStreamsRequest = new 
 DescribeLogStreamsRequest().withLogGroupName("SomeLogGroupName");

 //This is where I am getting error while mocking. But this same exectes properly while running with actual credentilas. But while mocking it fails       
 DescribeLogStreamsResult describeLogStreamsResult = awsLogsClient.describeLogStreams(logStreamsRequest);

执行Junit mockito测试时出现错误信息。

Caused by: com.amazonaws.services.logs.model.UnrecognizedClientException: The security token included in the request is invalid. (Service: AWSLogs; Status Code: 400; Error Code: UnrecognizedClientException; Request ID:

因此,如果Mockito测试仅针对上述代码创建,那将会很有帮助。我对Mockito来说是全新的

java unit-testing junit mockito powermock
1个回答
0
投票

由于您正在编写单元测试,因此您不希望使用awsLogsClient进行真正的http调用,而是希望为该客户端创建模拟,以便您可以控制返回的响应。通过这样做,您可以测试代码的成功和失败案例。另一个好处是你的单元测试执行速度更快,没有互联网连接。

我将首先嘲笑界面:https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/logs/AWSLogs.html

但是您需要一些机制来将此依赖项注入生产代码。

© www.soinside.com 2019 - 2024. All rights reserved.