Я издевался над API AWS s3, используя org.mockito (зависимость). Я вызываю mocked s3 API (создаю корзину сразу при запуске приложения) в методе init, который аннотирован postconstruct в весенней загрузке kotlin.
Вызовы метода Init перед выполнением теста, он вызывает реальный вызов API для s3, даже если мы его высмеиваем.
Метод init в инъекции конструктора класса обслуживания в kotlin
@Service
class S3Service (val s3Client: AmazonS3){
@PostConstruct
fun init() {
createBucket()
}
fun createBucket() {
try {
if (!s3Client.doesBucketExistV2(bucketName)) {
s3Client.createBucket(bucketName)
}
} catch (e: AmazonS3Exception) {
logger.error("Failed to create bucket ${e.message}")
throw e
}
}
}
Тестовый класс:
@ExtendWith(SpringExtension::class)
@SpringBootTest
@RunWith(MockitoJUnitRunner::class)
internal class S3ApiTest {
@Autowired
lateinit var s3Service: S3Service
@MockBean
lateinit var client: AmazonS3
@Test
fun testCreateBucket() {
given(s3Service.s3Client.doesBucketExistV2(bucketName)).willReturn(false)
given(s3Service.s3Client.createBucket(bucketName)).willReturn(null)
s3Service.createBucket()
}
}
Не могли бы вы помочь мне, как лучше всего решить эту проблему?