djUnitで@BeforeClass †djUnit(Junit3)で@BeforeClass、@AfterClass 等のアノテーションが効かない時の対処法。 http://iromemo.exblog.jp/9860257/ とかがあるらしい。 JUnit4が入れられない場合は、以下のようなテストケースの親クラス作る。 /* * 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)にも対応できるかも。 |