JFuncを使って,一つのインスタンスで複数のテストを実行
でけました.JUnitのテストランナーでも動作確認しました.
とりあえず,例.
public class SimpleTest extends TestCase { private int value = 0; public void testOne() throws Exception { value++; System.out.println("one:" + value); } public void testTwo() throws Exception { value++; System.out.println("two:" + value); } public void testThree() throws Exception { value++; System.out.println("three:" + value); } }
こんな感じのテストケースを作ったとするね.で,これを実行するとこんな結果になるよ.
one:1 two:1 three:1
one→two→threeと順番に実行されるのはたまたま.んで,インスタンス変数:valueの値は,テストメソッド間では共有されないのだ.
やりたいことは,テストメソッド間でインスタンス変数を共有させたい.
そこで,JFuncに登場願う.
こんな感じのTestSuiteを,さっきのテストケースに追加してやる(ポイントは太字のところ).
public static TestSuite suite() throws Exception { SimpleTest2 test = new SimpleTest2(); JFuncSuite suite = new JFuncSuite(); suite.oneTest(true); test = (SimpleTest2) suite.getTestProxy(test); test.testOne(); test.testThree(); test.testTwo(); return suite; }
で,もっかい実行すると,こんな結果になるのだ.
one:1 three:2 two:3
テストメソッドを一つのインスタンスで実行して欲しい場合は,
suite.oneTest(true);
を設定してやるとよい.で,TestProxyを取得してテストメソッドの実行順を教えるんだけど,使う側にとっては,ちょっと面倒なんだよね.
そして,なぜか suite.addTestSuite()
では,うまくいかなかった.それと,suite.oneTest(true)
もTestProxyを取得した直後に指定しないと,うまく効かないみたい.
ちょっと「う〜ん」なところもあるが,当初の目的はクリアできたから,よしとしよう.