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を取得した直後に指定しないと,うまく効かないみたい.


ちょっと「う〜ん」なところもあるが,当初の目的はクリアできたから,よしとしよう.