11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Java 8 でモックを作るさいの注意メモ。

Last updated at Posted at 2016-02-04

自分の場合は Java 8 & Spock でぶち当たった問題だけれど、元をたどると cglib というモック時にバイトコードをごにょごにょするライブラリに問題があった。
cglib というと Mockito、EasyMock や PowerMock でも使われているので、それなりのインパクトがあると思う。

結論

Maven レポジトリ上だと、Spock 1.0 (Groovy 2.4) は cglib 3.1 にオプショナルで依存しているけど、Java 8 でモック機能を使いたいなら 3.2 を使わないとダメっぽい。

経緯

Spock 1.0 (Groovy 2.4) と cglib 3.1 をMavenで導入し、よし何かテスト書いてやろうと思ったら、モックの際に IllegalArgumentException が出てしまった:

HelloMySpec.groovy
import spock.lang.Specification

class HelloMySpec extends Specification {
    def "test description"() {
        setup:
        def mock = Mock(SomeClass) // <-- こ奴が問題

        expect:
        name.size() == length

        where:
        name    | length
        "Spock" | 5
    }
}

以下の様な例外:

java.lang.IllegalArgumentException
    at net.sf.cglib.proxy.BridgeMethodResolver.resolveAll(BridgeMethodResolver.java:61)
    

ググってみると、Spock のイシュートラッカーに cglib 3.2 を使ってみたら治ったよ、という書き込みがあったので、従ってみたところ見事解決。

11
9
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
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?