状況
パターン網羅のために大量の呼び出しを行うようなテストを追加した所、java.lang.OutOfMemoryError
でテストが失敗する状況が生じました。
外形的な挙動としては、テスト関数が1つ終わってもメモリが解放されず、テストが進むにつれメモリ使用量も線形に伸びていました。
また、CPU
にも大きめの負荷がかかっているようでした。
調査した所、これらのリソース消費増大はMockK
でmock
/spy
した内容を大量に呼び出した場合に起きていました。
問題の起きたプロジェクトはSpringBoot
を用いていますが、テスト用のBean
として使われているmock
(= 元から大量呼び出しが有った)でこの症状が発生していました。
また、1テストに閉じたmock
であっても、数十 ~ 数百万回以上呼び出した場合には500MB以上のメモリ消費が生じていました。
MockK
の開いているイシューにはこのような問題の報告が無かったため、もしかするとSpringBootTest
/SpringMockK
に関係が有るのかもしれません。
少なくともバージョン1.12.1
と1.13.10
(執筆時点の最新最新)で発生を確認しています。
対処
最新でも問題が生じていたため、一旦大量呼び出しが想定されるオブジェクトではMockK
を使わない方針としました。