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

リア充爆発日記

You don't even know what ria-ju really is.

mockito1.9.5とpowermock1.5は同時に使えない件について

Android unit test

追記)なんかいろいろわかってないところがあるので、このエントリの内容はペンディング
powermockなんていらないやい!と思ってたけど、finalなGoogleMapクラスをモックにしないとどうにもテストがままならない事案が発生しまして。

で、powermockを以下のようにして導入。powermockはeasymockかmockitoとの組み合わせで使うことが想定されているのでpowermock-api-mockitoの方を組み込む。
pom.xml

    <properties>
        <powermock.version>1.5</powermock.version>
    </properties>
 <dependencies>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-module-junit4</artifactId>
            <version>${powermock.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-api-mockito</artifactId>
            <version>${powermock.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

で、mock化できるかどうかだけのカンタンな動作確認テスト

@RunWith(PowerMockRunner.class)
@PrepareForTest( { GoogleMap.class })
public class ManipulatorTest {

    @Test
    public void testAddMarker() throws Exception {
        GoogleMap map = Mockito.mock(GoogleMap.class);
        Manipulator manipulator = new Manipulator(map);
        assertThat(true , is(true));
    }
}

これは通った。

が、これでとりあえず他のテストに影響がないか確かめるため、AllTestかましたらmockito使ってるテストが軒並みいくつかのテストがコケた。

java.lang.NoClassDefFoundError: Could not initialize class org.mockito.Mockito

ぐぬぬ・・・。調べる。

http://code.google.com/p/powermock/issues/detail?id=398
どうもpowermockの起動時に必要なmockitoのクラスが1.9.5でなくなっちゃったとかなんとか。なんでpowermock使ってないテストでそういうことが起きるのかよくわかんないけど、とにかくそういうことらしい。

で、解決策は探したけど見つからない。
すごい嫌だったけど、mockitoのバージョンを一つ前の1.9.0にしたら既存のテストは通ったし、1.9.5のrelease note見ても特になきゃ困るという新機能とか見当たらなかったので、これで行く事にした。そのうちどちらかで対策されることを願いつつ。。

まだ、見つからない。コケるテストの共通項も見つからない。。。><
追記) Daoをmockしてるテストがこけている模様。とりあえずあきらめました。。どなたか何か情報あったらコメントください。。