我正在尝试模拟并使用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来说是全新的
由于您正在编写单元测试,因此您不希望使用awsLogsClient
进行真正的http调用,而是希望为该客户端创建模拟,以便您可以控制返回的响应。通过这样做,您可以测试代码的成功和失败案例。另一个好处是你的单元测试执行速度更快,没有互联网连接。
我将首先嘲笑界面:https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/logs/AWSLogs.html
但是您需要一些机制来将此依赖项注入生产代码。