How_to_Test_Server-side_Kotlin.pdf

14c9795d267f5b85abb98ca5e8780646?s=47 Taro Nagasawa
September 11, 2018

 How_to_Test_Server-side_Kotlin.pdf

Kotlin Fest 2018 わいわい報告会 ( https://connpass.com/event/100752/ ) で発表したスライドです

14c9795d267f5b85abb98ca5e8780646?s=128

Taro Nagasawa

September 11, 2018
Tweet

Transcript

  1. How to Test Server-side Kotlin 2018-09-11 長澤太郎

  2. 長澤太郎 • @ngsw_taro • Ubie株式会社 ソフトウェアエンジニア • 日本Kotlinユーザグループ代表

  3. Redesign Medical Care

  4. Kontributer しらじさん JOIN!!!!

  5. お疲れ様でした! https://photos.google.com/share/AF1QipMux-IXIIBpf2Rr_HwWtQu5pICYJlVCS9yzDmdVbEm0Gajya5D9-pS0A__jXksrAg?key=N0dDZ1hWd HNFVTFodHlpN1BiaC1laXpqQXJkN1Z3 より引用

  6. How to Test Server-side Kotlin エムスリー 前原さん、鈴木さん https://photos.google.com/share/AF1QipMux-IXIIBpf2Rr_HwWtQu5pICYJlVCS9yzDmdVbEm0Gajya5D9-pS0A__jXksrAg?key=N0dDZ1hWd HNFVTFodHlpN1BiaC1laXpqQXJkN1Z3 より引用

  7. How to Test Server-side Kotlin 編

  8. UbieではKotlin x SpringでAPI開発してます

  9. テスト関係のフレームワークやライブラリ • JUnit5 - Jupiter • Spring Test - WebTestClient

    • AssertJ • MockK • DbSetup-kotlin
  10. JUnit5 class FooTest { @Nested inner class fooMethod { @Test

    fun `should throw exception`() { assertThrows<MyException>() { Foo().foo() } } } }
  11. class FooTest { @Nested inner class fooMethod { @Test fun

    `should throw exception`() { assertThrows<MyException>() { Foo().foo() } } } } JUnit5
  12. JUnit5 class FooTest { @Nested inner class fooMethod { @Test

    fun `should throw exception`() { assertThrows<MyException>() { Foo().foo() } } } }
  13. AssertJ val got = sut.findUser(id) assertThat(got).isNotNull assertThat(got?.name).isEqualTo("ほげ")

  14. AssertJ val got = sut.findUser(id) assertThat(got).isNotNull assertThat(got?.name).isEqualTo("ほげ") Kotlin 1.3 Contractsで実現か!?

  15. MockK interface UserRepository { suspend fun findUser(id: Long): User? }

    val userRepo = mockk<UserRepository>() every { userRepo.findUser(1) } returns user
  16. MockK interface UserRepository { suspend fun findUser(id: Long): User? }

    val userRepo = mockk<UserRepository>() every { userRepo.findUser(1) } returns user coEvery { userRepo.findUser(1) } returns user
  17. WebTestClient - expectBodyメソッド webTestClient.get() .exchange() .expectBody(MyApiBody::class.java) .isEqualTo<Nothing>(expectedBody) NullPointerException が出る!

  18. WebTestClient - expectBody拡張関数 webTestClient.get() .exchange() .expectBody<MyApiBody>() .isEqualTo<Nothing>(expectedBody) import org.springframework.test.web.reactive.server.expectBody いける!

  19. WebTestClient - expectBody拡張関数 webTestClient.get() .exchange() .expectBody<MyApiBody>() .isEqualTo<Nothing>(expectedBody) import org.springframework.test.web.reactive.server.expectBody いける!

    が、サジェストされない
  20. Pluginのバグ(issueあった)

  21. しらじさん修正プルリク!!!神!!!!

  22. リリースされるのは 1.3.20 乞うご期待