본문 바로가기

Back-End (web)50

[kotlin][coroutine] awaitRetrieve 응답이 200이고 응답 body에 대한 처리만 하고 싶은 경우 retrieve. 이 외에 응답 코드가 4xx, 5xx 등 특정 코드에 따라 다른 결과를 주고 싶거나 응답 헤더를 사용하고 싶은 경우는 exchange를 사용하자. (참고 : [spring] webClient error 처리) 평소에 4xx, 5xx 일 때 에러는 신경안쓰고 body에 대해서만 고려해서 retrieve를 많이 사용했었다. coroutine으로 전환하면서 awaitRetrieve 를 쓰려고 했는데 없었다. 그러나 package org.springframework.web.reactive.function.client.WebClientExtension 에 awaitExchange 함수는 있다. (참고) suspend fun Reque.. 2020. 4. 5.
[JUnit5] @ParameterizedTest @ParameterizedTest 어노테이션은 테스트 함수에 파라미터로 TC나 결과 등을 주입할 수 있다. // build.gradle.kts dependencies { // add testImplementation("org.junit.jupiter:junit-jupiter-params:5.5.2") } 의존성추가 private fun String?.toIntOrNull(): Int? { return if (this.isNullOrEmpty()) null else try { this.toInt() } catch (e: NumberFormatException) { null } } 테스트를 위와 같은 확장 함수를 하나 만들었다. 문자열이 null이거나 빈 경우 null을 반환하고 아닌 경우 문자열을 Int로.. 2019. 12. 15.
[IntellJ] Kotlin 코드를 java 코드로 확인하기 Tools > Kotlin > Show Kotlin Bytecode 클릭 왼쪽에 있던 코틀린으로 작성했던 Board.kt가 오른쪽과 같이 바이트코드화 되어 결과를 확인할 수 있다. 오른쪽 위에 Decompile 버튼을 누르면 위와 같이 java 코드로 확인할 수 있다. 2019. 12. 9.
[MockK] JPA repository.save param assert @MockK lateinit var repository: UserRepository @Test fun test() { // given lateinit var result: User every { repository.save(any()) } answers { result = firstArg() // set save argument firstArg() } // when // then assertEquals(result, ...) // save 파라미터로 확인 가능 } @Test fun test() { // given every { repository.save(any()) } returnsArgument(0) // #1 every { repository.save(any()) } returnsArgument 0.. 2019. 12. 9.
[Test] webClient 통신 테스트 (mockServer) // build.gradle plugins{ // add testImplementation("org.mock-server:mockserver-netty:5.7.2") } mockserver 의존성 추가 @TestInstance(TestInstance.Lifecycle.PER_CLASS) abstract class MockServerNettyHelper { companion object { val GSON = Gson() } private val host = "http://localhost" private val port = 8000 lateinit var mockServer: ClientAndServer @BeforeAll fun startMockServer() { // #1 mockServer = Cl.. 2019. 12. 8.
[Kotlin] String to LocalDateTime parse 말머리가 Kotlin인 이유는 kotlin으로 작성했기 때문.. java라고 봐도 무방하다. import java.time.LocalDateTime.of class LocalDateTimeTest { @Test fun test() { // expect assertEquals(of(2019, 12, 4, 12, 3, 12), "2019-12-04 12:03:12".toLocalDateTime()) assertEquals(of(2019, 12, 4, 12, 3), "2019-12-04 12:03".toLocalDateTime()) assertEquals(of(2019, 12, 4, 12, 3,12,100000000), "2019-12-04 12:03:12.1".toLocalDateTime()) } } 테스트.. 2019. 12. 7.