Mock не работает, даже если мы смоделировали внешний вызов API, когда у нас есть метод init, который аннотирован PostConstruct при весенней загрузке - PullRequest
0 голосов
/ 21 октября 2019

Я издевался над 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()

    }
}

Не могли бы вы помочь мне, как лучше всего решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...