JUnit4とdjUnitを使いたいんですけど
djUnitのVirtual Mock Objectsを使うと、かゆい所に手がとどくテストが出来る。ぜひ使おう。
と思ってJUnit4でテストコードを組んで、djUnitを使うためにextends DJUnitTestCaseを突っ込んで、と・・・。
あれ?@BeforeClassが呼ばれない?
というかアノテーションが効いてないような?

でよくよく見てみると、DJUnitTestCaseはJUnitのTestCaseを継承している為、コードがJUnit3扱いになるらしい。えーなんじゃそりゃ。

どうしよう・・・と思ったらDJUnitTestCaseの中身は実際はMockObjectManagerにあるらしい。

という訳でとりあえずこうしてみた。




★テストケースの親クラス(DJUnitTestCaseモドキ)
----------------------------------------------------------------------------------
package test.djunit;
import jp.co.dgic.testing.common.virtualmock.MockObjectManager;
import org.junit.Before;
public abstract class DJUnit4TestCase {
@Before
public void setUpDJUnit4TestCase() throws Exception {
MockObjectManager.initialize();
}
}
----------------------------------------------------------------------------------

★テストケース
----------------------------------------------------------------------------------
package test;

import static org.junit.Assert.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import static jp.co.dgic.testing.common.virtualmock.MockObjectManager.*;
import test.djunit.DJUnit4TestCase;

public class SampleTest extends DJUnit4TestCase {

@BeforeClass
public static void setUpBeforeClass() throws Exception {
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
}

@Before
public void setUp() throws Exception {
}

@After
public void tearDown() throws Exception {
}

@Test
public void testSample() {
//何かテストする
}

//以下略
}
----------------------------------------------------------------------------------


DJUnit4TestCaseの中身がすっからかんなのは手抜きですか?
はい手抜きです。

【追記】
MockObjectManager.initializeを呼ぶ理由だけど、これの呼び出しが「なんでsetUpの中なのか」。
要するに、テストメソッドで仕込んだaddReturnValueなどの情報が、次のテストメソッドに持ち越されると正しくテストできないからテストメソッド実行前にクリアしてるんだと思う。
[PR]
by memogaki | 2008-10-05 04:55
<< Kingsoft Intern... いまさらSwing いまさらT... >>