我正在尝试模拟并使用AWS内置类。但是不断出现不同的错误。
虽然我正在测试一个完整的方法,但我能够模拟所有其他方法,但是当涉及到凭据形成时,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模拟测试时出现错误消息。
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完全陌生
答案 0 :(得分:0)
由于您正在编写单元测试,因此您不想使用awsLogsClient
进行真正的http调用,而是希望为该客户端创建一个模拟,以便您可以控制返回的响应。这样,您可以测试您的代码是否成功。这样做的另一个好处是,您的单元测试将在没有Internet连接的情况下执行得更快。
我将从模拟接口开始: https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/logs/AWSLogs.html
但是您将需要某种机制来将这种依赖性注入到您的生产代码中。