tanamonの稀に良く書く日記

KEEP CALM AND DRINK BEER

maven-surefire-plugin(djUnitを使用)

Unitテストを実行するmaven-surefire-pluginの設定
id:tanigonさんのこの記事が大変参考になりました。ありがたいことです。

/project/build/plugins

      <!-- UnitTest(DjUnit使用) -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.4.2</version>
        <configuration>
          <!-- ↓改行させるとClassNotFoundExceptionが出る -->
          <argLine>-Djava.system.class.loader=jp.co.dgic.testing.common.DJUnitClassLoader -Djp.co.dgic.eclipse.virtualmock.usevirtualmock=true -Djp.co.dgic.eclipse.coverage.usecoverage=false -Djp.co.dgic.eclipse.project.source.dir="${project.build.sourceDirectory}" -Djp.co.dgic.eclipse.virtualmock.ignore.library=false</argLine> 
          <forkMode>always</forkMode>
          <useSystemClassLoader>true</useSystemClassLoader>
        </configuration>
      </plugin>

オプションはほぼおまじないなので省略。以下は注意点。

  • コメントにあるようにargLineに改行が入るとエラーになりますので、1行で書きます。
  • ${project.build.sourceDirectory}が""でくくられていますが、これがないとHudsonなど(正確にはスペースが含まれるディレクトリ上)で実行するとエラーになります。

この2つは知らないと超ハマるので気をつけてください。

/project/dependencies

    <!-- jUnit / djUnit -->
    <dependency>
      <groupId>jp.co.dgic</groupId>
      <artifactId>djunit</artifactId>
      <version>0.8.3</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.2</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>asm</groupId>
      <artifactId>asm</artifactId>
      <version>3.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>oro</groupId>
      <artifactId>oro</artifactId>
      <version>2.0.8</version>
      <scope>test</scope>
    </dependency>

djunit, junit, asm, oroが必要になります。
(djunitの内部でoroを使っているので、oroも必須です)