why
Should を使ってネストされたわかりやすい Kotlin のテストを作りたかった。既に Ktor アプリで Hello World はしていたので、それに追加を試みてみた。
KotlinTest と Behavour 駆動開発
https://qiita.com/rkowase/items/b612e18caa3d5aca5043
rkowase さんの記事によると
kotlinTest という外部ライブラリを使うと
should というわかりやすい名前のテストを使えるらしい。
すると、TDD を BDD にして、
テストが仕様書の役割まで兼ねる読みやすいものになるらしい。
結論
結論、既に動いている Ktor アプリに KotlinTest を追加するのは無理だった。
なので、新しく KotlinTest の依存関係の Junit5 を組み込んで Ktor アプリを作ることにする。
KotlinTest を Ktor アプリに追加
build.grandle.kts の dependencies の testImplementation に kotlin("test") を追加
https://kotlinlang.org/docs/jvm-test-using-junit.html#add-the-code-to-test-it
Kotlin の公式 docs を参考にする。
build.grandle.kts が Node.js の pack.json だと解釈する。
npm install の同等なものは見つからなかったので
dependencies {
// Other dependencies.
testImplementation(kotlin("test"))
}
dependencies に testImplementation で
kotlin("test") を入れて追加する。
こうやって依存関係を設定ファイルにいれて
再度ビルドすればインストールが走ると仮定する。
tasks.test {
useJUnitPlatform()
}
task.test という新しい実行を作って、
て useJUnitPlatform を入れる。
ビルドしなおす
再度ビルドする。すると
Execution failed for task ':compileTestKotlin'.
> Error while evaluating property 'filteredArgumentsMap' of task ':compileTestKotlin'
> Could not resolve all files for configuration ':testCompileClasspath'.
> Module 'org.jetbrains.kotlin:kotlin-test-junit' has been rejected:
Cannot select module with conflict on capability 'org.jetbrains.kotlin:kotlin-test-framework-impl:1.7.0' also provided by [org.jetbrains.kotlin:kotlin-test-junit5:1.7.0(junit5Api)]
すると、TestKotlin の実行に失敗する。
Junit 5.1.7 がないとのエラーがでている。
https://kotlinlang.org/docs/jvm-test-using-junit.html#add-dependencies
公式のページをみると、最初にプロジェクトを生成する時に
Junit5 を含んで生成するように描いてあった。
Project Structure から
GUI でいく
https://stackoverflow.com/a/19330833
main / test のフォルダで右クリックすると
Open Module Settings のページがでてくる。
Project Structure / Project Settings /
Modules / Dependenices /
ここまで開く。
ここで Project Settings / に戻って
Library を開き、青い + ボタンを押す。
開いたモーダルで From Maven を選択する。
すると Web から検索して DL できるモーダルが開く。
ここで junit5 と入力して虫眼鏡ボタンを押すと
- com.automation-remarks の junit 5.1.{6,7}
- com.bnorm の junit 0.1.{0,1}
- com.flowloginx.org の junit の
- contianer, core, parent,
エラーメッセージに必要だとでてきた 5.1.7 を入れる。
Transitive depend のみ
ktor の本体に追加
source / ktor / lib / に入った。
Module で読めるようになる。
Export を Apply する。
しかしこれでもエラーがかわらなかった。
Execution failed for task ':compileTestKotlin'.
> Error while evaluating property 'filteredArgumentsMap' of task ':compileTestKotlin'
> Could not resolve all files for configuration ':testCompileClasspath'.
> Could not resolve org.jetbrains.kotlin:kotlin-test-junit:1.7.0.
Required by:
project :
> Module 'org.jetbrains.kotlin:kotlin-test-junit' has been rejected:
Cannot select module with conflict on capability 'org.jetbrains.kotlin:kotlin-test-framework-impl:1.7.0' also provided by [org.jetbrains.kotlin:kotlin-test-junit5:1.7.0(junit5Api)]
> Could not resolve org.jetbrains.kotlin:kotlin-test-junit5:1.7.0.
Required by:
project : > org.jetbrains.kotlin:kotlin-test:1.7.0
もともと ビルドシステムを Maven ではなく IntelliJ で作っていたからかもしれない。
Junit 込で最初から作り直す。
Top comments (0)