** djUnitで@BeforeClass [#x059b531]

#setlinebreak(on);

djUnit(Junit3)で@BeforeClass、@AfterClass 等のアノテーションが効かない時の対処法。

http://iromemo.exblog.jp/9860257/
とかがあるらしい。
http://iromemo.exblog.jp/9860257/  とかがあるらしい。

JUnit4が入れられない場合は、以下のようなテストケースの親クラス作る。
beforeClassMethodName、afterClassMethodName で指定した名前のメソッドが
継承したクラスに定義されていれば、実行前、実行後に1回だけ実行される。

 /*
  * DJUnitで@BeforeClass、@AfterClassの代替
  */
 public class MyTestCaseBase extends DJUnitTestCase {
 
 	private static String beforeClassMethodName = "oneTimeSetup";
 	private static String afterClassMethodName  = "oneTimeTearDown";
 
 	public static Test suite() throws Exception {
 		Thread t = Thread.currentThread();
 		ClassLoader cl = Thread.currentThread().getContextClassLoader();
 		Field f = ClassLoader.class.getDeclaredField("classes");
 		f.setAccessible(true);
 		Vector v = (Vector)f.get(cl);
 		Enumeration enumeration = v.elements();
 		int idx = 0;
 		while (enumeration.hasMoreElements()){
 			Class cls = (Class)enumeration.nextElement();
 			idx += 1;
 			if ("MyTestCaseBase".equals(cls.getSimpleName())){
 				break;
 			}
 		}
 		Class testClass = (Class)v.elementAt(idx);
 		final Method beforeClassMethod = testClass.getMethod(beforeClassMethodName, new Class[] {});
 		final Method afterClassMethod  = testClass.getMethod(afterClassMethodName, new Class[] {});
 		TestSuite suite = new TestSuite(testClass);
 		TestSetup wrapper = new TestSetup(suite){
 			public void setUp() throws Exception {
 				if (beforeClassMethod != null) {
 					beforeClassMethod.invoke(null);
 				}
 			}
 			public void tearDown() throws Exception {
 				if (afterClassMethod != null) {
 					afterClassMethod.invoke(null);
 				}
 			}
 		};
 		return wrapper;
 	}
 }

もう少し頑張ればアノテーション(@BeforeClass)にも対応できるかも。

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS