Google Guiceを利用したJUnit試験用のRunnerとAnnotation 改造
前回作成したTestRunnerに対して、Moduleのクラス名のsafixにTestが付いているものを優先して読み込むように改造した。
#テスト時は、xxxxを利用したいといった場合用です。
public class GuiceJunitRunner extends BlockJUnit4ClassRunner { protected final static Log _log = LogFactory.getLog(GuiceJunitRunner.class); public GuiceJunitRunner(Class<?> klass) throws InitializationError { super(klass); } @Override protected void validateZeroArgConstructor(List<Throwable> errors) { // nothing } @Override protected Object createTest() throws Exception { Class<?> cls = getTestClass().getJavaClass(); GuiceStage guiceStage = cls.getAnnotation(GuiceStage.class); GuiceModule guiceModule = cls.getAnnotation(GuiceModule.class); Injector injector = null; List<Module> modules = new ArrayList<Module>(); if (guiceModule != null) for (Class<?> moduleClass : guiceModule.value()) { try { String testModule = moduleClass.getName() + "Test"; try { moduleClass = Class.forName(testModule); } catch (Exception e) { ; // nothing } modules.add((Module) moduleClass.newInstance()); } catch (InstantiationException e) { if (_log.isErrorEnabled()) { _log.error(MessageFormat.format( "InstantiationException Module is {1}", moduleClass.toString()), e); } throw e; } catch (IllegalAccessException e) { if (_log.isErrorEnabled()) { _log.error(MessageFormat.format( "IllegalAccessException Module is {1}", moduleClass.toString()), e); } throw e; } } if (guiceStage != null && guiceModule != null) { injector = Guice.createInjector(guiceStage.value(), modules); } else if (guiceStage != null) { injector = Guice.createInjector(guiceStage.value()); } else if (guiceModule != null) { injector = Guice.createInjector(modules); } else { injector = Guice.createInjector(Stage.DEVELOPMENT); } return injector.getInstance(getTestClass().getJavaClass()); } }