TestNGの現時点の最新のリリースは5.8だけど、このバージョンだとJDK1.4環境でテストが実行できない。これはIssue25で指摘されているとおり、Java5から追加されているメソッド(String#contains)がorg.testng.reporters.XMLStringBufferで使用されているから。
trunkですでに修正されている(r629)のだけど、現時点では最新のソースをビルドしても他の部分でひっかかってうまく動かなかったので、XMLStringBufferのクラスファイルだけ5.8の中のものと置き換えて、とりあえず対処した。
ちなみに最新のリビジョンでひっかかるのは、org.testng.reporters.EmailableReporterで、こちらもJava5から導入されたStringBuilderが使用されているから。報告上げたほうが良いのかしら。
AntでTestNGタスクを利用してテストを自動実行したら、その結果はメールで送るようにしておくと、メーラー上でテスト履歴が一覧できるようになって便利。 TestNGのレポートの出力には、「emailable-report.html」という、メールで読みやすいように整形されたHTMLが含まれているので、これを使用する。
<!-- antcallでの呼び出し専用target -->
<target name="test" if="initialized" depends="prepare" description="テストを実行し、テスト結果をメール送信します。">
<!-- TestNG -->
<testng classpathref="run.classpath" dumpcommand="true" verbose="3" outputdir="result/${module.name}" sourcedir="src" failureproperty="failed">
<classpath>
<pathelement path="${module.path}" />
<pathelement location="bin" />
</classpath>
<xmlfileset dir="." includes="${module.test}" />
</testng>
<!-- 失敗したらメールサブジェクトに「FAILED!」を入れる -->
<condition property="subject" value="TestNG - ${ant.project.name} with ${module.name} Module (${os.name}/${os.arch}) - FAILED!!">
<isset property="failed" />
</condition>
<condition property="subject" value="TestNG - ${ant.project.name} with ${module.name} Module (${os.name}/${os.arch})">
<not><isset property="failed" /></not>
</condition>
<!-- メール送信 -->
<mail mailhost="${mailhost}" from="${mail0}" tolist="${mail1}" subject="${subject}" encoding="plain">
<message src="result/${module.name}/emailable-report.html" mimetype="text/html" />
</mail>
</target>
Cobertura1.9のAnt用タスク「cobertura-report」は、ソースファイルがUTF-8であることを前提にしているので、Windows環境でShift_JISなんかで書いてたりするとレポートが文字化けする。
ぐぐってみると、日本語対応パッチを書いてらっしゃる方も見つかるのだが(1/2)、ソースがそんなに多くないならUTF-8で一時的にコピーを作っちゃうと楽。Ant1.6以上ならcopyタスクでoutputencodingを指定できる。
<copy todir="${utf8src}" encoding="Shift_JIS" outputencoding="UTF-8">
<fileset dir="${src}">
<include name="**/*.java" />
</fileset>
</copy>
<cobertura-report format="html" destdir="${coverage}" srcdir="${utf8src}" />
昼飯を食べながら、「揮発性BDD」というのを妄想してみた。
そのかわり、
これは、
という効果が期待できると思うのだけど、どうかしら。
当たり前だけど、真面目にユニットテストをやるほうが、モジュールの信頼性は上がるし、結合してから問題は起きにくい。 結合してからのテストが、真面目にユニットテストをやらない場合よりも圧倒的に楽になる。
逆に言えば、真面目にユニットテストをやらないほうが、結合テストを真面目にやる傾向がある気がする。
これは、GUIのユーザビリティなんかに結構影響があって、何べんも結合テストで使っているうちに見えてくる問題点もあるんだよなぁと思う。 いってみればドッグフードを食べてる状態で、リリースまでに改善できる部分がより多くなるんではないか。
Weekly Squeakの記事「JSqueak - Smalltalk interpreter written in Java」経由で、JSqueak。実は2006年ぐらいからあったらしい(=>大島芳樹のカリフォルニア日記 - DanのSqueak on Java )。
ちょっとだけ触ってみたけど、これが5000行以下のコードで動くってのはすごいと思った。Java Web Startで、ブラウザからクリック一発で試せるのもうれしい。
今は冗談抜きで忙しすぎるので、落ち着いたらちゃんとコードを読んでみよう。

PukiWiki向けのExcelアドイン「Wikiサポートアドイン」を、以前から便利に使わせていただいていたのだけど、使ってるうちにだんだんコンテキストメニューがなんだかすごいことになってきました。Officeはいまだに2003。
VB分からんしなーと思ってほっといてたんですが、ちと増えすぎたんで検索。「ワークシート上での右クリックメニューを初期化するには」を参考に、リセットしました。
Application.CommandBars("Cell").Reset
これでキレイになりました。

日本語版が出来たと聞いたので、アカウントを作ってみました。
以下のプログラムを、Vista上で管理者権限のないユーザで実行すると、(3)のときだけ失敗した。
import java.io.File;
public class Tekito {
public static void main(String [] args) {
// (1)
createTempFile(new File("."));
// (2)
createTempFile(new File(System.getProperty("user.dir")));
// (3)
createTempFile(new File(""));
}
private static void createTempFile(File parent) {
System.out.println(parent.getAbsolutePath());
try {
File.createTempFile("hoge", "fuga", parent);
System.out.println("成功");
} catch (Exception ex) {
System.out.println("失敗");
ex.printStackTrace();
}
}
}
C:\Users\die\workspace\tekito\.
成功
C:\Users\die\workspace\tekito
成功
C:\Users\die\workspace\tekito
失敗
java.io.IOException: アクセスが拒否されました。
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.checkAndCreate(File.java:1704)
at java.io.File.createTempFile(File.java:1793)
at Tekito.createTempFile(Tekito.java:14)
at Tekito.main(Tekito.java:8)
管理者として実行すれば全部成功する(XPだと、管理者じゃなくても成功する)。ワケがわかんないです。なんでだろう。
.NET | AIR | AOP | Ant | BDD | COBOL | CentOS | Java | Lisp | Logo | Mac | OCaml | OpenSource | Oracle | PC | PDF | PHP | Perl | PostScript | Redmine | Ruby | SNS | Scheme | Smalltalk | Spring | Squeak | Subversion | TechEd | TestNG | Trac | UML | VB | WSH | Wiki | XML | XPS | mobile | tDiary