ScalaTestのテストケースをsbtから実行しIntelliJでデバッグする
Posted on January 13, 2019 at 23:50 (JST)
指定したテストケースのみを実行し、IntelliJ でステップ実行する方法について記載する。
IntelliJ IDEA は任意の JVM remote server と連携してデバッグ実行するための機能を備えている。
下記の手順でステップ実行等GUIの機能を利用できる。
- SBT_OPTS(環境変数)にデバッグを外部から受け付けるオプションを設定し、sbtを立ち上げる
- IntelliJの
Run/Debug Configurations
の設定をする - IntelliJ IDEAのエディターにブレークポイントを置く
- sbtコマンドでテストを実行する
※ sbt shell
を公式ドキュメント通りに操作してデバッグ実行できる。
が、最近なぜかコンパイルすらできない状態になってしまったため代替案を調べた。
動作環境
OS: macOS Mojave ver. 10.14.1
IntelliJ IDEA: 2018.3
sbt: 1.2.8
Scala: 2.12.7
ScalaTest: 3.0.4
1. SBT_OPTS(環境変数)にデバッグを外部から受け付けるオプションを設定し、sbtを立ち上げる
下記コマンドを実行し、sbtプロセスを起動する
(.bash_profileなどに指定しても良い)
$ SBT_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005" sbt
※ 2019-01-15修正。-Xdebug -Xrunjdwp:
は古いJava用のもので、この指定の場合マルチプロジェクトでdebuggerが起動しない。
コンソールに表示されるメッセージ
mypc:project username$ SBT_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005" sbt
Listening for transport dt_socket at address: 5005
[info] Loading settings for project global-plugins from idea.sbt ...
[info] Loading global plugins from /Users/username/.sbt/1.0/plugins
[info] Loading project definition from /Users/username/path/to/first-scala
[info] Loading settings for project first-scala from build.sbt ...
[info] Set current project to first-scala (in build file:/Users/username/path/to/first-scala/)
[info] sbt server started at local:///Users/username/.sbt/1.0/server/69da06ca52587afb664b/sock
sbt:first-scala>
2. IntelliJのRun/Debug Configurationsの設定をする
Debugger mode
にAttach to remote JVM
を、Port
に5005
を設定する。
OK
で閉じた後、右にある虫ボタン(Debug sbt remote server)を押してdebuggerを起動する。
3. IntelliJ IDEAのエディターにブレークポイントを置く
省略
4. sbtコマンドでテストを実行する
sbtでテストを実行する。
(testOnlyで対象クラスを指定し、– -zでテストケースを指定)
sbt:first-scala> testOnly *SampleSpec -- -z "CoffeeMachine"
下図のようにデバッグ機能が利用できる
以上。
参考URL
- SBTとIntelliJでブレークポイントを張る
- どんなJavaアプリやjarライブラリでもデバックする方法(eclipseによるリモート・アタッチ)
- Debug Scala code(IntelliJ IDEA 公式)