DEV Community

kaede
kaede

Posted on

Kotlin Project への KotlinTest の追加に失敗

why

Should を使ってネストされたわかりやすい Kotlin のテストを作りたかった。既に Ktor アプリで Hello World はしていたので、それに追加を試みてみた。


KotlinTest と Behavour 駆動開発

https://qiita.com/rkowase/items/b612e18caa3d5aca5043

rkowase さんの記事によると

kotlinTest という外部ライブラリを使うと
should というわかりやすい名前のテストを使えるらしい。

https://ja.wikipedia.org/wiki/%E3%83%93%E3%83%98%E3%82%A4%E3%83%93%E3%82%A2%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA

すると、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"))
}
Enter fullscreen mode Exit fullscreen mode

dependencies に testImplementation で
kotlin("test") を入れて追加する。

こうやって依存関係を設定ファイルにいれて
再度ビルドすればインストールが走ると仮定する。

tasks.test {
    useJUnitPlatform()
}
Enter fullscreen mode Exit fullscreen mode

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)]

Enter fullscreen mode Exit fullscreen mode

すると、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

Image description

main / test のフォルダで右クリックすると

Open Module Settings のページがでてくる。

Project Structure / Project Settings /
Modules / Dependenices /

ここまで開く。

ここで Project Settings / に戻って
Library を開き、青い + ボタンを押す。
開いたモーダルで From Maven を選択する。

Image description

すると Web から検索して DL できるモーダルが開く。
ここで junit5 と入力して虫眼鏡ボタンを押すと

Image description

  • 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 / に入った。

Image description

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
Enter fullscreen mode Exit fullscreen mode

もともと ビルドシステムを Maven ではなく IntelliJ で作っていたからかもしれない。

Junit 込で最初から作り直す。

Top comments (0)