rspec で java クラスをテストする例
rspec をつかって java クラスをテストする例を作ってみた。
1. 簡単な java クラスを定義。
2. Rakefile をつくる。
jruby -S spec ... として、上で作成した java クラスのメソッドの挙動をテストする。
1. java クラス
===========
$ cat MyClass.java
package foo;public class MyClass {
public int add(int a, int b) {
return a + b;
}public int sub(int a, int b) {
return a - b;
}public static void main(String[] args) {
System.out.println("This is MyClass.");
}
}
2. Rakefile
=========
$ cat Rakefile
require 'rake'MYLIB ="build/lib"
MYCLASS_JAR = "MyClass.jar"task :default => :compile
desc "Compile the native Java code."
task :compile do
mkdir_p "build/classes"
sh "javac -d build/classes #{FileList['**/*.java'].join(' ')}"
enddesc "Generate jar."
task :jar =>[:compile] do
mkdir_p "#{MYLIB}"
sh "jar cvf #{MYLIB}/#{MYCLASS_JAR} -C build/classes/ ."
enddesc "Remove build folder"
task :clean do
rm_rf "build"
sh "rm -f *~"
enddesc "Run sample program."
task :run_sample => [:jar] do
sh "CLASSPATH=#{MYLIB}/#{MYCLASS_JAR}:$CLASSPATH;jruby callMyClass.rb"
enddesc "Run rspec."
task :spec =>[:jar] do
sh "CLASSPATH=./build/lib/MyClass.jar:$CLASSPATH;jruby -S spec -c -fs MyClass_spec.rb"
end
まだ、Rakefile の書き方に慣れていない。もっと洗練した書き方ができるように勉強しないと...
spec ファイル
===========
$ cat MyClass.rb
require 'rubygems'
require 'java'include_class 'foo.MyClass'
describe MyClass, "add method" do
it "should return sum" do
myClass = MyClass.new
myClass.add(1,2).should == 3
end
enddescribe MyClass, "sub method" do
it "should return sub" do
myClass = MyClass.new
myClass.sub(1,2).should == -1
end
end
ここでは
add(1,2) が 3 を返すこと
sub(1.2) が -1 を返すこと
をチェックしている。
実行例:
======
$ rake spec
javac -d build/classes MyClass.java
jar cvf build/lib/MyClass.jar -C build/classes/ .
Java::Foo::MyClass add method
- should return sumJava::Foo::MyClass sub method
- should return subFinished in 0.339 seconds
2 examples, 0 failures
おまけ:
=======
ruby から java クラスを呼び出す簡単な例
$cat callMyClass.rb
# set CLASSPATH=$CLASSPATH:MyClass.jar
# jruby callMyClass.rbrequire 'rubygems'
require 'java'include_class 'foo.MyClass'
obj = MyClass.new
p obj.add(1,10)
p obj.sub(1,10)
xfy/xvcd 用につくった xpath関数、インストラクションの簡易テストに junit でなく
Rspec をつかうことも面白いかもしれない。
« ピックアップ:一行で IE の JavaScript を高速化, グーグルやヤフーが実践する製品開発手法, etc... | トップページ | ピックアップ:イノベーションの神話, XMLが嫌われている, etc... »
この記事へのコメントは終了しました。
« ピックアップ:一行で IE の JavaScript を高速化, グーグルやヤフーが実践する製品開発手法, etc... | トップページ | ピックアップ:イノベーションの神話, XMLが嫌われている, etc... »
コメント