2013年10月31日木曜日

mavenとtestngでJavaのテストコードをモダンに開発

■概要
rubyやpython, phpなどのスクリプト言語にあるパッケージ管理ツール「gem」「easy-install」「composer」などを使って
サーバサイド上で簡単にソースが書けちゃうってやつを頑張ってJavaでやるとこうなったというのを紹介します
頑張れば、できなくなないです。。。

■環境
CentOS 5.9 64bit
maven 3.1.0
Java 1.7.0_05
※Javaのインストールに関しては
http://kakakikikeke.blogspot.jp/2012/06/centosjenkinsjavatomcatantgit.html
※mavenのインストールに関しては
http://kakakikikeke.blogspot.jp/2013/10/maven.html

■開発
1. mvnプロジェクトを作成する
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.kakakikikeke.test -DartifactId=Sample_Test

2. testngをダウンロードする
vim pom.xml
<dependencies>...</dependencies>の間に以下を追記する
※記載したあ、とデフォルトで入っているJUnitのdependencyの記載を削除して大丈夫です
<dependency>
  <groupId>org.testng</groupId>
  <artifactId>testng</artifactId>
  <version>6.3.1</version>
  <scope>test</scope>
</dependency>
mvn clean
mvn compile

すると以下のローカルのリポジトリにパスにjarファイルがダウンロードされます
/root/.m2/repository/org/testng/testng/6.3.1/
※mvn clean と mvn compile はやらなくても記載して保存した段階で勝手にmavenがダウンロードしてきてくれます

3. テストケースを書く(サンプル)
vim src/test/java/com/kakakikikeke/test/AppTest.java
package com.kakakikikeke.test;

import org.testng.annotations.Test;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;

public class AppTest {

  @BeforeTest
  public void beforeTest() {
    System.out.println("beforeTest");
  }

  @AfterTest
  public void afterTest() {
    System.out.println("beforeTest");
  }

  @Test
  public void TestCase1() {

  }
}
と記載したら

mvn clean
mvn test-compile
mvn test

でtestngのテストが実行されます
あとはTestCase1に肉付けして行ったり、TestCase2を作成したりすれば一応「mvn」コマンドだけでテストケースを書いて実行することができます


とここまで環境が整っていざ開発となると、実は正直かなりめんどくさかったです。。。
以下、具体的にいけてない感じた点です
  • ライブラリを追加するときにいちいち maven repository から必要なライブラリを見つけてそのXML情報をpom.xmlに記載する必要がある
  • maven repository の検索性能がイマイチで自分が必要としているライブラリがなかなか見つからない
  • 全然関係ないライブラリを追加していることがある
  • mvn clean から test までの流れを毎回やるのが正直めんどくさい(シェルを一つ書いて一回でできるようにするとか独自のgoalを作るとかはありますが)
  • やっぱりJavaはサジェストがエディタににないと厳しい(このへんは emacs とかでもなんとかなりますが、準備が大変。。。)
といった印象を受けました
最終的にはあきらめて「mvn eclipse:eclipse」とかでeclipse形式に吐き出してeclipseにインポートして開発するのが一番楽なのかなと思ってしまった次第です
本当に枠組みだけ作るのであれば紹介した手順だけでもいいのかなーと思いました

0 件のコメント:

コメントを投稿