1. はじめに
しばらくの間、ハマってしまったので、ここにメモとして残します。
最近、Go言語での開発にIntelliJ IDEAを使い始めたのですが、テスト実行で不可解な現象が発生しました。
実行途中でテストが中断され、
No tests were run (テストは実施されなかった)
という結果になる現象です。
また、日本語(マルチバイト文字)をログ出力すると、その内容の所々に空白が差し込まれるという問題も起きていました 1。
不思議なことにテスト関数名を短くしたり、逆に長くしたりして、良い塩梅の関数名を定義するとテストは動作しました。
しかし、テストのご機嫌をうかがうようなこの対処法では流石に続けられないと、原因を調べることにしました。
2. 環境
Windows 10 Home
IntelliJ IDEA 2023.2.3 (Ultimate Edition)
go 1.19.9
3. 原因は?
当初はGo言語のtestingに問題があると思い込んで調査していましたが、特にこれといった有効な情報は見つかりませんでした 2。
それもそのはず、原因はIntelliJのコンソールにあったのですから。
IntelliJのコンソールが怪しいと思ったのは、試しにコマンドプロンプトからテストをコマンド実行(go test
)すると正常動作したためです。
さらにその時は、出力ログに空白が差し込まれることもありませんでした。
これより、IntelliJのコンソール出力処理がログに細工を行うところで問題が起きている可能性が高いと判断しました 3。
4. 対処法は?
IntelliJ(のコンソール)に余計な仕事をさせないようにすればよいということで、go.run.processes.with.pty
4をOFFにします。
【設定方法】
この設定を変更すると、テストが正常に動作するようになりました。
また、出力ログについても、おかしな空白の差し込みはなくなりました。
5. おわりに
問題が解決した後に分かったのですが、JetBrains YouTrack を見ると、このような問題がいくつか報告されているようで、その度に「go.run.processes.with.pty
をOFFにしなさい」というコメントがついていました。
デフォルト設定がOFFにならないものでしょうか
6. 参考にさせていただいた情報
コンソール | GoLand ドキュメント
https://pleiades.io/help/go/settings-console-folding.html
-
当初はテスト未実施(No tests were run)とは関係ないと思っていましたが、結果的にこれが問題の原因になったのではないかと考えています。 ↩
-
見つけた情報の中には「標準出力に吐き出しているログの末尾に改行がないとテストに失敗する」というものもありましたが、今回の現象はこれには該当しませんでした。 ↩
-
たとえば空白を差し込む箇所で特定の1文字を分断してしまい、それがたまたま制御記号になってコンソール処理をクラッシュさせてしまったとか、想像は膨らみますが、このあたりの原因は不明です。 ↩
-
このパラメータはコンソール出力の「行の折りたたみ、折り返し、トリミングを制御する」もののようです。 ↩