0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cucumberテストでブレークポイントが効かない?Payaraをデバッグモードで起動すべき理由と対処法

Posted at

はじめに

Cucumberによる結合テストで、実装側のブレークポイントが効かず困ったことはありませんか?

私自身、JUnitでは止まるのに、Cucumberから呼ばれる実装処理が止まらず何が起きているかわかりませんでした。
原因は「Payaraをデバックモードで起動していないこと」にありました。

この記事では、その技術的な理由と対処法をわかりやすく整理しました。

背景と疑問におもったこと

Cucumberテストを実行し、実装側にブレークポイントを設定しても、Payaraをデバックモードでデプロイしていないと、ブレークポイントが反応しない理由がわからなかった。
Junitなどの単体テストではIDEと同じJVM内で実行されるためブレークポイントが効くが、Payara経由で動作するCucumberテストの場合、なぜデバックモードでサーバを起動しないと止まらないのか疑問

技術的な補足・考察

想定される原因と背景

Cucumberは通常、アプリケーションを起動したPayara Serverに対してHTTPリクエストを投げてテストを行う構成(外部結合テスト)であることが多い。

1.そのため、テストコード(Cucumber)が呼び出す対象は、「Payara上にデプロイされたアプリケーションのHTTPエンドポイント」になる。
2.実装の処理が実行されるのはPayara上のプロセスであり、IDEの通常のデバックモードでは対象にならない。

Payaraがデバックモードで起動されていないと、JVMのデバッガーポートが開かれておらず、IDEから接続できない。

1.デバッグモードでは、JVMに対して「外部デバッガから接続可能なポート」が開かれ、IDEと通信できるようになる。
2.通常モードだとこの接続が行えず、IDEのブレークポイントも機能しない。

ポイントまとめ

用語 意味
JVM Javaの実行環境
Payara JVM上で動くアプリサーバ
デバッガーポート JVMがデバッグ時に外部と通信するために開くポート
JPDA デバッガーとJVM間の通信を可能にするプロトコル。
IDE 開発を支援する統合環境。

Payara は JVM 上で動いているアプリケーションサーバ

通常モードとデバッグモードの違い

対処法としては

Payaraを--debugオプションまたはIDE(例:IntelliJ)の「Debug」ボタン経由で起動する。
JPDAポート(例:9009)をIDE側のRemote Debug設定で接続しておく。
されに、payara-maven-pluginなどを使っている場合は、debugプロファイルの設定も確認する。

学び

Cucumberを使ってPayara上のREST APIをテストする際、実装側でのブレークポイントを効かせるには、Payara Server自体をJPDAポートを開いてデバッグモードで起動する必要があるとわかった。
単体テスト(JUnit)とは異なり、外部結合テストではサーバプロセスが別JVM上で動いており、IDEからは直接制御できない点に注意。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?