読者です 読者をやめる 読者になる 読者になる

SpockでJavaの無名クラスを使ったらCircleCIがコケた #circleci #java #spock

CircleCIがテストの途中にタイムアウトでこけた。

command mvn test took more than 10 minutes since last output

ログを見ても途中で止まっており、結果としてもタイムアウトなので検討つかない。
もちろんローカル環境では発生しない。

RevertなりなんなりしながらTry&Errorを行うと、どうもSpockでインターフェースを返すメソッドをMockにする際、無名クラスを使っているところが原因の模様。

インターフェースはこんな感じ

public interface HomeCarePlanner {
  String getName();
}

テストはこんな感じ

given:
def hogeMock = new Hoge(){
    @Override
    String getName() {
        return 'dummy'
    }
}
hogeService.get(*_) >> hogeMock

対応

無名クラスを使わずに、GroovyMockしてあげたら発生しなくなった。
根本原因は分からない。。(´・ω・`)

def hogeMock = Mock(Hoge)
hogeMock.getName() >> 'dummy'
hogeService.get(*_) >> hogeMock