1
2
3
4
5
<body> <p(wicket:id="label1">message1(is(here.</p> </body> 6
import(org.apache.wicket.markup.html.webpage; ( public(class(simplepage(extends(webpage({ ( ((public(simplepage()({ ((((//" ((} ( } 7
//"1." String(message1(=(" "; ( //"2." Model IModel<String>(model1(=(new(Model<>(message1); 8
//"3."Model HTML wicket:id Label(label1(=(new(Label("label1",(model1); ( //"4." add add(label1); 9
<body> <p(wicket:id="label1"> </p> </body> 10
<body> <p(wicket:id="label1">message1(is(here.</p> </body> Label( label1 ) getobject Model return String WicketSapporo <body> <p(wicket:id="label1">wickethsapporo </p> </body> 11
12
13
Page 1 Link Page 2 Link Page 3 HistoryBack History@Back@ @2 Page1 Stateful!! Link Page 4 14
15
16
17
18
19
20
"... " "...... " 21
public(class(calculator({ ( ((public(int(add(int(x,(int(y)({ ((((return(x(+(y; ((} ( } public(class(calculatortest({ ((private(calculator(calculator; ( ((@Before ((public(void(setup()({ ((((calculator(=(new(calculator(); ((} ( ((@Test ((public(void(add 0 1 1 ()({ ((((int(actual(=(calculator.add(0,(1); ((((assertthat(actual,(is(1)); ((} (@Test ((public(void(add 3 4 7 ()({ ((((int(actual(=(calculator.add(3,(7); ((((assertthat(actual,(is(7)); ((} @@ } 22
23
new(wickettester(webapplication); private!wickettester!tester;! @Before public!void!setup(){!!tester!=!new!wickettester(new!wicketapplication()); } 24
25
tester.startpage(webpage); @Test public!void!test1()!{!!//"!!tester.startpage(new!homepage()); } 26
tester.assertrenderedpage(class); @Test public!void! ()!{!!//"HomePage!!tester.startPage(new!HomePage());!!//" "HomePage.class"!!tester.assertRenderedPage(HomePage.class); } 27
tester.assertlabel("id",(string); @Test public!void! (){! tester.startpage(homepage.class);! //message1 "!"! tester.assertlabel("message1",!" "); } 28
tester.executeurl("./foo/bar");! @Test public!void! CleanURL ()!{!!//"URL!!tester.executeUrl("./foo/communityId/123");!!//" "FooPage.class"!!tester.assertRenderedPage(FooPage.class);!!//"communityId 1000!!tester.assertLabel("communityId",!"123"); } 29
WicketTester#clickLink tester.clicklink("id",(boolean); idのlinkコンポーネントのonclickメソッドが実行される クリックされた後の結果を 他のassertメソッドでチェックする 第2引数はAjaxが有効な環境でのクリックかどうか 省略するとtrue 使用例 @Test public!void!barpageに遷移される()!{!!tester.startpage(new!ws01indexpage());!!//"tobarpage"linkコンポーネントがクリックされる!!tester.clicklink("tobarpage");!!//"simplepageクラスのページに遷移されるか!!tester.assertrenderedpage(barpage.class); } 30
//"id tester.assertvisible("id"); //"id tester.assertinvisible("id"); //"id tester.assertenabled("id"); //"id tester.assertdisabled("id"); //"id tester.assertrequired("id") 31
tester.assertcomponentonajaxresponse("id"); @Test public!voiddlink wmc ()!{!!tester.startpage(new!homepage());!!tester.clicklink("link");!!//"link Ajax wmc!!tester.assertcomponentonajaxresponse("wmc");!!//"wmc!!tester.assertinvisible("wmc"); } 32
tester.executeajaxevent("id",!string); @Test public!void!click (){!!tester.startpage(homepage.class);!!tester.assertlabel("label",!" ");!!!!//"Ajax "click"!!tester.executeajaxevent("label",!"click");!!tester.assertlabel("label",!" "); } 33
tester.executealltimerbehaviors(markupcontainer); executebehavior(behavior) @Test public!void!timerbehavior clock ()!{!!WebPage!page!=!tester.startPage(new!AjaxTimerPage());!!//"Page TimerBehavior.!!tester.executeAllTimerBehaviors(page);!!//"TimerBehavior add.!!tester.assertcomponentonajaxresponse("clock"); } 34
tester.startcomponentinpage(component); @Test public!void!panel ()!{!!//" FooPanel!!tester.startComponentInPage(new!FooPanel("foo"));!!//"FooPanel Label1!!tester.assertLabel("foo:label1",!"Hello!")); } 35
tester.assertcomponent("id",(class); tester.assertmodelvalue("id",(object); tester.getlastrenderedpage(); tester.getcomponentfromlastrenderedpage("id"); 36
37
tester.newformtester("form",!false); @Test public(void(formtest1()({ ((tester.startpage(new(homepage()); ((//"Form ""(FormTester(formTester(=(tester.newFormTester("form"); } 38
formtester.setvalue("id",!string); formtester.select("id",!int); formtester.selectmultiple("id",!int...); 39
!formtester.submit(); @Test public!void!form submit Label ()!{!!tester.startpage(new!formpage()); DD//"nameLabel DDtester.assertLabel("nameLabel",!"");!!FormTester!formTester!=!tester.newFormTester("form");!!formTester.setValue("name",!"foo");!!formTester.submit(); DD//"nameLabel submit DDtester.assertLabel("nameLabel",!"foo"); } 40
tester.assertfeedback("id",dstring...); assertinfomessages(string...)d asserterrormessagesd(string...) 41
42
tester.getsession(); @Test public!void! ()!{!!MySession!session!=!(MySession)!tester.getSession();!!session.setSigned(false);!!tester.startPage(SignedPage.class);!!tester.assertRenderedPage(ErrorPage.class); } 43
44
45
<dependency>!!<groupid>org.apache.wicket</groupid>!!<artifactid>wicketyguice</artifactid>!!<version>6.12.0</version> </dependency> <dependency>!!<groupid>com.google.inject</groupid>!!<artifactid>guice</artifactid>!!<version>3.0</version> </dependency> <dependency>!!<groupid>org.apache.wicket</groupid>!!<artifactid>wicketyspring</artifactid>!!<version>6.12.0</version> </dependency> <dependency>!!<groupid>org.springframework</groupid>!!<artifactid>springycontext</artifactid>!!<version>3.2.5.release</version> </dependency> 46
@Override public!void!init()!{!!super.init();!!/*" "*/!!initguice(); }! protected!void!initguice()!{!!//"wicket!!getcomponentinstantiationlisteners().add(new!guicecomponentinjector(this)); } 47
//" @ImplementeBy @ImplementedBy(Foo.class) public!interface!ifoo!{!!public!boolean!bar();!!!/*" "*/ } public!class!bazpage!extends!webpage!{!!!//guice @Inject!!@Inject!!private!IFoo!foo;!!!/*" "*/ } 48
@Before public(void(setup()({ ((tester(=(new(wickettester(new(wicketapplication()({ ((((@Override ((((protected(void(initguice()({ ((((((//" Module ((((((Module(module(=(new(Module()({ ((((((((@Override ((((((((public(void(configure(binder(binder)({ ((((((((((IFoo(foo(=(mock(IFoo.class); ((((((((((//"IFoo ((((((((((binder.bind(ifoo.class).toinstance(foo); ((((((((} ((((((}; ((((((getcomponentinstantiationlisteners().add(new(guicecomponentinjector(this,(module)); ((((} ((}); } 49
@Override public(void(init()({ ( ((/*" "*/ ( ((initspring(); } ( protected(void(initspring()({ ((AnnotationConfigApplicationContext(ctx(=(new(AnnotationConfigApplicationContext(); ((//" Bean ((ctx.scan("com.exmaple"); ((ctx.refresh(); ((getcomponentinstantiationlisteners().add(new(springcomponentinjector(this,(ctx)); } ApplicationContext xml 50
//"Spring bean @Component OK @Service public(class(foo(implements(ifoo({ ((@Override ((public(boolean(bar()({ ((((/*" "*/ ((} } public!class!bazpage!extends!webpage!{!!!//spring @SpringBean!!@SpringBean!!private!IFoo!foo;!!!/*" "*/ } 51
@Before public(void(setup()({ ((tester(=(new(wickettester(new(springapplication()({ ((((@Override ((((protected(void(initspring()({ ((((((//" ((((((IFoo(foo(=(Mockito.mock(IFoo.class); ((((((//" ApplicationContextMock ((((((ApplicationContextMock(ctxm(=(new(ApplicationContextMock(); ((((((ctxm.putbean("foo",(foo); ((((((getcomponentinstantiationlisteners().add(new(springcomponentinjector(this,(ctxm)); ((((} ((}); } 52
53
54
new!model<t>(t); new!listmodel<t>(t); 55
56
CompoundPropertyModel new!compoundpropertymodel<t>(t); wicket:idを元に オブジェクトのフィールド変数が コンポーネントのモデルオブジェクトとして自動参照されるモデル 使いこなすとコード量を少なくでき データの取り扱いも楽 Bean Component( foo ) CompoundProperty Model add add 参照 Component( bar ) Model Component( baz ) Model bar 自動参照 baz 自動参照 57
IModel<UserLunch>!userLunchModel!=!new!CompoundPropertyModel<>(new!UserLunch()); Form<UserLunch>!form!=!new!Form<UserLunch>("form",userLunchModel)!{!!!!!!//" }; add(form);! //" "userlunch" "name" TextField<String>!nameField!=!new!TextField<>("name"); form.add(namefield);! //" "userlunch" "lunch" RadioChoice<String>!radioChoice!=!new!RadioChoice<>("lunch",!lunchesModel); form.add(radiochoice); 58
new!abstractreadonlymodel<t>()!{!!!@override!!public!t!getobject()!{!!!!//"!!!!//"!!} }; 59
new!loadabledetachablemodel<t>()!{!!!@override!!public!t!load()!{!!!!//"!!!!//"!!!!//"!!} }; 60
61