tl; dr;
- JDKのpathにwhite spaceが含まれていると、mockkで使用しているByteBuddyがパス解決に失敗する
- ProjectのJDKのpath設定を変更し、white spaceが含まれないようにすることで解決する
- JDKを別途ダウンロードするのが良いと思われる
環境
発生する問題
InteliJ IDEAでmockkを使用したテストを作成し、実行した際に Error during attachment using: net.bytebuddy.agent.ByteBuddyAgent$AttachmentProvider$Compound@772ab00f
というエラーが発生し失敗してしまう。
対応
エラーメッセージをさらに追っていくと Cannot run program ""/Applications/IntelliJ IDEA.app/Contents/jbr/Contents/Home/bin/java"": error=2, No such file or directory
というメッセージがあり、JavaのPathの解決に失敗していることがわかる。ただし、パス通りの場所を確認すると問題なくJDKはあることがわかる。
Byte BuddyのIssueを探したところ、下記のIssueが見つかる。 github.com
内容を確認すると、Javaのパス読み込み時にwhite spaceがあると失敗するらしい。例えばInteliJ IDEAの場合は InteliJとIDEAの間にwhite spaceがあるため失敗していると思われる。 ということは、 Android Studioにおいても AndroidStudio Previewのように間にwhite spaceがある場合は失敗するのかもしれない。 Java Versionに依存するのではないかという記載もあり、 Java 11以外だと大丈夫なのかもしれない。 MacOSとタイトルに記載があるのでWindows環境でもおそらく発生しないと思われる。
簡単なワークアラウンドも記載してある。簡単にいうと、InteliJで使用するSDKをInteliJ IDEA内部のものから変更するという内容。
For whom with the same trouble, here's a clean workaround: Press ⌘ + ; to open Project Structure. Select + > Download JDK from Platform Settings > SDKs tab. Download new SDK to some path without whitespaces. (I recommend ${HOME}/Library/Java/JavaVirtualMachines/) Congratulations! You've solved the problem.
上記のJDK home pathにwhite spaceが含まれないようになっていればよい。 実際にワークアラウンドを試したところ、無事mockkを使用したユニットテストを実行することができた。
単純にwhite spaceが含まれなければいいのではないかと思い、InteliJ_IDEAのようにアプリ名を変更することを試みたが、 ランタイムで使用するJavaの設定も変えなければいけないというような内容のエラーメッセージが表示され影響範囲がよめなかったため上記の解決策が良いのだと思う。 ※Project設定のパスを変えてもランタイムで使用する方のJavaのパス設定は InteliJ IDEA表記のままとなっていたため別途設定が必要そう
最後に
原因がわからず解決まで時間を要したので、同じ問題に遭遇した方の時間の節約に貢献できたら幸いです。