2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【モダン】Kotlin + SpringBoot + JUnit5をVSCodeでDebugをする

Last updated at Posted at 2022-06-11

最近3日前くらいにKotlinをはじめて完全に理解しました。
よろしくお願いします。

※Kotlin文法はこちらの記事をご参照ください。
30分で覚えるKotlin文法

Scalaはほとんど絶滅した感じで、世はやっぱりJavaかと思う昨今ですが
そういやKotlinが居たなーと思いサーバーサイドのKotlin + SpringBoot
現状を調べてみました。

2022年現在(6月) VSCode + Kotlin
・コード補完があんまり効かない。
・デバッグがよくわからない。
・私はIntelliJ Ultimateユーザです。

という致命的な状態であることに絶望しました。

俺たちが本当に欲しかったのは言語の説明ではなく
いい感じにモダンな言語の開発フィーリングであって
VSCodeでキラキラした感じに開発できる環境なのです。

Goでいいじゃん。
そうなんですけど、WEB界最強のFWであるSpringBootでサーバを創りたいんです。
VSCode + Javaでいいじゃん。
最近のJava(VSCode)はかつての隆盛を思わせる無敵の環境になりつつありますが
なにせJava。書きっぷりが冗長すぎる。

そこでJavaとScalaの良さを合わせていい感じにモダナイズされたKotlinですよ。(10年前)

fig.png

では、さっそくアンサーを記します。
Spring initializer > gradle > kotlinでプロジェクトを作成してください。
Kotlin + SpringBootまではネットに情報があると思います。

build.gradle (旧)
dependencies {
	...
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
    testImplementation("org.junit.jupiter:junit-jupiter")
    testImplementation("org.junit.jupiter:junit-jupiter-api")
    testImplementation("io.mockk:mockk:+")
    testImplementation("org.springframework.boot:spring-boot-starter-test") {
        exclude(module = "junit")
        exclude(module="junit-vintage-engine")
        exclude(module = "mockito-core")
    }
}
build.gradle (新)
dependencies {
	...
    // ↓そりゃそうですよね。
    testImplementation("org.springframework.boot:spring-boot-starter-test")
}
SampleController.kt
	@RestController
	class SampleController {
	    @GetMapping("/")
	    fun getHello() :String {
	        return "Hello Kotlin"
	    }
	}
SampleControllerTests.kt
@SpringBootTest (
  webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
)
class SampleControllerTests {

  @Autowired 
  lateinit var restTemplate: TestRestTemplate

  @Test
  fun index() {
    val entity = restTemplate.getForEntity<String>("/", String::class.java)
    Assertions.assertEquals(HttpStatus.OK, entity.statusCode)
  }

}
launch.json
"configurations": [
    {
        "type": "kotlin",
        "request": "attach",
        "name": "Kotlin Attach",
        "hostName": "localhost",
        "projectRoot": "${workspaceFolder}",
        "port": 5005,
        "timeout": 30000
    }
]

ここまで準備できたらターミナルからgradleでデバッグできます。
基本リモートデバッグです。

$ ./gradlew bootRun --debug-jvm

5005リッスンが出てくるので、launch.jsonで設定したやつをアタッチしてください。

Listening for transport dt_socket at address: 5005

次にJUnitのデバッグですが、こちらもリモートデバッグします。
VSCode + Javaはここが強力で、もうJavaでいいじゃんと思ってしまいますが。

$ ./gradlew test --tests "*Tests" --info --debug-jvm

はい、コントローラのデバッグは出来るのですが、JUnit側のソースはデバッグできません。
そこは気合でなんとかしましょう。
KotlinTestとかだとできるんですかね。。

ひとまずこれでKotlinでWebAPIを作成できる環境が整ったと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?