我正在嘗試模擬使用 AmazonS3ClientBuilder 構建的 S3 客戶端。我該怎么做?
這是我的代碼:
val s3client: AmazonS3 = AmazonS3ClientBuilder
.standard()
.withRegion(s3BucketRegion)
.build()
val request: PutObjectRequest = PutObjectRequest(
s3BucketName,
"$s3BucketKey/file.json",
ByteArrayInputStream(byteArrayJson),
metadata
).withCannedAcl(CannedAccessControlList.BucketOwnerFullControl)
s3client.putObject(request)
這是我嘗試過的,但我不斷收到 403 錯誤。這意味著它不是在嘲笑客戶端
val mockS3Client = mock(AmazonS3::class.java)
val mockPutObjectRequest = mock(PutObjectRequest::class.java)
val mockPutObjectResult = mock(PutObjectResult::class.java)
//val mockAmazonS3ClientBuilder = mock(AmazonS3ClientBuilder::class.java)
//whenever(mockAmazonS3ClientBuilder.withRegion("").build()).thenReturn(mockS3Client)
whenever(mockS3Client.putObject(mockPutObjectRequest)).thenReturn(mockPutObjectResult)
uj5u.com熱心網友回復:
模擬依賴項的方法之一是注入依賴物件。AmazonS3您可以在 Spring 配置類中定義一個 bean
@Configuration
class AwsConfig{
@Bean fun amazonS3() = AmazonS3ClientBuilder
.standard()
.withRegion(s3BucketRegion)
.build()
}
而在依賴類中,只需注入物件
@Service
class MyService(
private val s3Client: AmazonS3
){
fun someMethod(){
val request: PutObjectRequest = PutObjectRequest(
s3BucketName,
"$s3BucketKey/file.json",
ByteArrayInputStream(byteArrayJson),
metadata
).withCannedAcl(CannedAccessControlList.BucketOwnerFullControl)
s3client.putObject(request)
}
}
在測驗中,您只需將模擬 s3 客戶端傳遞給MyService
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/485565.html
上一篇:如何基于泛型自動注入實作
