カテゴリー別アーカイブ: テスト駆動

MacでJava7環境の日本語扱いの問題について(eclipse, IntelliJ IDEA)


Macに標準でインストールされているJavaはAppleから提供されているJDK1.6系のものです。JDK1.7系はすでにリリースされているのでその最新のJDK1.7(java7)を利用するようにしたいと思いますよねー!!
Oracleのサイトから最新のJavaをインストールするには、以下を確認すればインストールできると思います。
http://www.java.com/ja/download/faq/java_mac.xml

■インストール後にバージョンを確認してみる

% java -version
java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

これで、java7系が無事インストールできていると思います。

そこでテストコードを書く時などをわかりやすくするために、 日本語でテストメソッド を書くことも多いと思います。そんな時に日本語がうまく認識できずに「ClassNotFoundException」となってしまいます。どうにか解決するようにちょっと試行錯誤してみました。

EclipseやIntellij IDEAなどのIDEからテストを実行する時に発生する問題で、コマンドラインからテストを実行すればとくに問題はおきません。

自分の場合はMavenを利用してHogeTestというテストを実行するために「mvn test -Dtest=HogeTest」のコマンドを実行しても問題無く実行することが出来ました。


Eclipseでの日本語問題の解決方法

以下の様なテストクラスがあったとします。

public class HogeTest {

    @Test
    public void テストメソッド() {
        assertTrue(true);
    }

}

単純に実行した時点では「ClassNotFoundException」になってしまいます。
次の記事を参考にEclipseで実行時に使用するVMの引数に「-Dsun.jnu.encoding=UTF-8」というオプションを指定してあげれば日本語メソッドも解決出来ます。
JUnit のテストメソッド名に日本語を使ったときの問題の解決法 (Java 7)

しかし、以下のようにEnclosedを用いてネストしたテストクラス名を日本語とした場合

同じく「ClassNotFoundException」になってしまいます。

@RunWith(Enclosed.class)
public class HogeTest { 
    public static class ネストしたテストクラス {
        @Test
        public void ネストテストメソッド() {
            assertTrue(true);
        }
    }
}

これはちょっと、謎なんですが、以下のコマンドでeclipseを起動してあげると解決します。今のところこの方法で起動するようにすればとりあえず日本語のクラス名やメソッド名でも問題無く実行できるようになります。

% open /Application/eclipse/Eclipse.app

なんとなく、腑に落ちないのですがとり上記コマンドをエイリアス貼って起動するようにしています。


Intellij IDEAでの日本語問題の解決方法

基本的にはEclipseと同様に日本語のクラス名やメソッドがある場合「ClassNotFoundException」となってしまいます。
以下の2つの手順を実行すれば解決します!

  1. IntelliJ IDEA の日本語テストメソッド名の実行で再度ハマった話
    Run => Edit Configrations => Defaults => JUnit の VM options に “-Dsun.jnu.encoding=UTF-8” を追加する。

  2. IntelliJ IDEA + Spock で日本語テストメソッド実行時にハマった話
    「/Applications/IntelliJ\ IDEA\ 12\ CE.app/Contents/Info.plist」ファイル(Info.plist)を開いて、VMOptions の string の最後に「-Dgroovy.source.encoding=UTF-8 -Dfile.encoding=UTF-8」を追加する。 IntelliJ IDEAまでのPathは環境に合わせて適宜変更してください。

「1」 についてはEclipseのVM引数と同じですねー。
「2」 については記事内にもあるのですが、テストクラスでテストメソッドを指定して実行しようとした時の対処です。この設定を入れなくてもテストクラス全体を一気に実行する場合は問題無く実行できます。

これでそれぞれのIDE上でとりあえず日本語の問題は解決できると思います!

TDDBC OSAKA1.0へ参加しました!


 

2012年6月2日 TDDBootCampへ参加しました。

和田さんのセッションから始まり、ワークショップでTDDを実践し、夜の懇親会は闇LTでとてもサイコーな1日をすごせました。

特にGroovyには魅了されました。前から気になっていたのですが、Spockの素晴らしさが目に見えて凄いと思いました。

GrailsとかGraidleとかGroovy関連はなんか熱いっす!! これはもう始めましょう。。

そしてグリーンバンドも手に入れました。

今日からグリーンな男を目指してがんばろっと

以下、メモをまとめます。
  • 和田卓人さんのセッション

ソフトウェア開発の3本柱(三脚椅子)

・バージョン管理

・テスティング

・自動化(自働化)

人間ができることをする(デプロイなどの同じ作業は機械が向いている)。

基本的に自動で動かし通知方法を ツイッター、IRC、スカイプなどを通して人間に伝える。

人間がPullすることをなくし、機械がPush出来るようにする。

※バージョン管理が基本 これはソフトウェア開発の前提条件。


Testとは

・Developer Testing(開発者 開発促進) <ーTDDBCの対象

・CustomerTesting(顧客 進捗確認)

・QATesting(品質保証担当者 品質保証)

 

TDDのサイクル

1.テストを書き

2.そのテストを実行して失敗させ(Red)

3.目的のコードを書き

4.1で書いたテストを成功させ(Green)

5.テストが通るままでリファクタリングを行う(Refactor)

6.1〜5を繰り返す

 

黄金の回転

小さくはじめる

red, green, refactor を回す

 

TDDの心構え

1つずつ 少しずつ(大きい問題を小さく分割すること)

複数を相手にしない。(ひとりずつ対処する) 複数のテストを同時には書かない

素早くまわす(自分が何をするかがぼやけている場合は素早く回せない。) <ーこれが難しい。。と思う

不安に思うことについてテストを書く!

テストは目的じゃなくて手段(不安の克服健康体の維持)

 

テスト駆動開発とは何か

「健康」

変化に対応するのは健康体のコード

変化に対応するのは健康体のチーム

 

テストと製品コードについて

テストコードが正しいことはどうやって確認する?

テストコードと製品コードのつなぎ部分を確認する(テストコードの正しさは製品コードで確かめる)

そのために仮実装を行う。(必ず通る定数などを返すなど)

三角測量??

仮実装で通った値とは違う値を入れて確認してみる

テストコード自体はゴールから書く

何もない状態からテストをはじめるには。。

今回の自販機の課題であれば、何もない状態から表示するということを行う。(何もない状態で0を表示する)

 

最近のテストフレームワークは入れ子(ネスト)でかける Junit (Enclosed)

http://blog.livedoor.jp/ryu22e/archives/cat_50184887.html

テスト駆動に慣れてくると細かい単位のテストばかりではなく、大きな意味で、テストの構造を考える。インターフェースに対するテストなどPrivateメソッドなどの見えない部分はテストする必要があるか? Publicメソッド経由でPrivateメソッドはテストできる。だからPrivateメソッドのテストは各必要はない。

 

  • 以下、感じたことやその他のメモ。。

バージョン管理はやっぱり大事というか、最低限のもの。。コードを書く前にこれと仲良くならないといけない!!

パラメータライズドテスト これが凄いね。てすとにパラメータを与えることが出来る。。

Groovyのspockは凄い。

複数のパラメータで同じ内容を確かめたい時に使う(エラーケースを確認するなど)

 

破壊的なTest(関さん)

未知のものを探しに行く

テストを書く(通すためにする) OR テストをする(壊してやる、不具合を探す)

TDDは動くようにする、綺麗にするという繰り返しのループ。破壊的なテストをすることでコードを強くする事ができる

 

 

  • 振り返り

フレームワーク(KPT)http://ameblo.jp/tetsu7s/entry-10358337824.html

Keep

Try

Probrem