JUnit4 + djUnit (without JUnit3)の覚書

今日は午後から外出するので早めの書き込みです。キーワードは、

  • Movin' on without setUp()
  • MockObjectManager.initialize()

Movin' on without setUp()

JUnit4からアノテーション(@Test,@Before...)をサポートするようになったので、古き良き?JUnit3で宣言していた、

  • extends TestCase (djUnitの場合:DJUnitTestCase)
  • setUp()

などなど、不要になっている。JUnit4の場合、

	public void setUp() throws Exception {
            // テストメソッドの前処理
	}

だけでは実行されないので、

        @Before
	public void setUp() throws Exception {
            // テストメソッドの前処理
	}

としないと駄目。但し、setUp()固定ではなく任意名でOKになった!

MockObjectManager.initialize()

Virtual Mock Objectやカバレッジツールで超便利なdjUnitですが、JUnit3をベースとしたTesting Frameworkであるが故、JUnit4 + djUnitの場合、ちょっと一工夫が必要。
以下、本家サイトの抜粋:

DJUnitTestCaseの機能は、すべてMockObjectManagerクラスが持っており、DJUnitTestCaseは、代理呼び出ししているだけです。

http://works.dgic.co.jp/djwiki/Viewpage.do?pid=@E38386E382B9E38388E382B1E383BCE382B9E381AEE6BA96E58299

なるる。もしかして、djUnitの「d」は、delegate(委任とか委譲とか代理とか代表)の略なのかな?
DJUnitTestCase extends TestCaseだから、setUp()もオーバーライドしているようで、

protected void setUp() throws Exception {
    super.setUp();
    MockObjectManager.initialize(); // 毎回なにかを初期化している!
}

だったようで。なので、JUnit4 + djUnitの場合、

	@Before
	public void setUp() throws Exception {
		MockObjectManager.initialize();
	}

としなきゃ駄目。MockObjectManager.initialize()は何かを初期化してるんですね。
例えば、DJUnitTestCaseクラスの検査メソッド

  • public static void assertCalled(String className, String methodName)
  • public static int getCallCount(String className, String methodName)

などなど、テストメソッドを実行する前処理でカウント初期化とかしてる筈b

いじょ