アレについて記す

ScalaTestのテストケースをsbtから実行しIntelliJでデバッグする

Posted on January 13, 2019 at 23:50 (JST)

指定したテストケースのみを実行し、IntelliJ でステップ実行する方法について記載する。

IntelliJ IDEA は任意の JVM remote server と連携してデバッグ実行するための機能を備えている。
下記の手順でステップ実行等GUIの機能を利用できる。

  1. SBT_OPTS(環境変数)にデバッグを外部から受け付けるオプションを設定し、sbtを立ち上げる
  2. IntelliJのRun/Debug Configurationsの設定をする
  3. IntelliJ IDEAのエディターにブレークポイントを置く
  4. 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 modeAttach to remote JVMを、Port5005を設定する。

IntelliJのRun/Debug Configurations

OKで閉じた後、右にある虫ボタン(Debug sbt remote server)を押してdebuggerを起動する。

start debugger

3. IntelliJ IDEAのエディターにブレークポイントを置く

省略

4. sbtコマンドでテストを実行する

sbtでテストを実行する。
(testOnlyで対象クラスを指定し、– -zでテストケースを指定)

sbt:first-scala> testOnly *SampleSpec -- -z "CoffeeMachine"


下図のようにデバッグ機能が利用できる

Debbuger


以上。


参考URL