S2JUnit4PluginをSandbox申請してみた
[operation:2133] [申請] S2JUnit4Plugin
構想としてはテストフレームワークとしてのDIコンテナ - wyukawa’s blogから変わっていないのですが、師匠が
http://blog.tsukuba-bunko.jp/ppoi/archives/2008/10/re-wyukawa-quic.htmlといっているのでSandbox申請してみました。
なのでQuickJUnitプラグインをちらほら調査しています。で今日判明したこと。
設定画面が無い。
この件は
にあるようにplugin.xmlを非コメントアウトすればでてきます。
r55でコメントアウトされたようですが、その理由はひょっとしたら下記のようなことかも。
JUnitを作成するときに
java.lang.NoSuchFieldException: fPage at java.lang.Class.getDeclaredField(Class.java:1854) at junit.extensions.eclipse.quick.OpenTestingPairAction.setUpNewClassCreationWizard(OpenTestingPairAction.java:95) at junit.extensions.eclipse.quick.OpenTestingPairAction.openPairWizard(OpenTestingPairAction.java:78) at junit.extensions.eclipse.quick.OpenTestingPairAction.runWhenTestingPairNotExist(OpenTestingPairAction.java:166) at junit.extensions.eclipse.quick.OpenTestingPairAction.run(OpenTestingPairAction.java:132) at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:251) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:583) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:500) at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3823) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3422) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2382) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2346) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2198) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:493) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:488) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:386) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504) at org.eclipse.equinox.launcher.Main.run(Main.java:1236) at org.eclipse.equinox.launcher.Main.main(Main.java:1212)
というスタックトレースがでます(プラグインをインストールして実行したらでないかも)。
でもその後の動作にはとりあえず問題無いようだったのですが、テストケース生成ウィザードに出てくるテスト名が必ず〜Testになります。
設定画面を有効にして命名規約をTest以外にしても同じです。この問題があるからひょっとしたらコメントアウトしたのかも。
ちなみにNoSuchFieldExceptionがでるのはEclipse3.1以降ではorg.eclipse.jdt.internal.junit.wizards.NewTestCaseCreationWizardで
private NewTestCaseWizardPageOne fPage1;
となってるからだと思います。
ちなみにEclipse3.0のときは、
private NewTestCaseWizardPageOne fPage;
なのでEclipse3.0ならうまくいくかも。
ともあれ、以下のように修正すれば、設定画面、テストクラスの命名規約を有効にでき、ついでにTODOもなくせますw
Index: plugin.xml =================================================================== --- plugin.xml (revision 184) +++ plugin.xml (working copy) @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.0"?> <plugin> -<!-- + <extension point="org.eclipse.ui.preferencePages"> <page @@ -11,7 +11,7 @@ id="junit.extensions.eclipse.quick.QuickJUnitPreferencePage"> </page> </extension> ---> + <extension point="org.eclipse.ui.popupMenus"> <viewerContribution Index: src/junit/extensions/eclipse/quick/OpenTestingPairAction.java =================================================================== --- src/junit/extensions/eclipse/quick/OpenTestingPairAction.java (revision 184) +++ src/junit/extensions/eclipse/quick/OpenTestingPairAction.java (working copy) @@ -92,7 +92,7 @@ return; try { String typeName = extractTypeName(pairNames[0]); - Field pageField = wizard.getClass().getDeclaredField("fPage"); //$NON-NLS-1$ + Field pageField = wizard.getClass().getDeclaredField("fPage1"); //$NON-NLS-1$ pageField.setAccessible(true); Object page = pageField.get(wizard); Method setTypeNameMethod = page.getClass().getMethod("setTypeName", @@ -100,8 +100,7 @@ setTypeNameMethod.setAccessible(true); setTypeNameMethod.invoke(page, new Object[]{typeName, Boolean.TRUE}); } catch (Exception e) { - // TODO: log - e.printStackTrace(); + QuickJUnitPlugin.getDefault().handleSystemError(e, this); } }