概要
前回は、Spring BootでApache Wicketを動かすところまで進めた。これをWicketTesterでJUnitテストできるようにする。
1.2.x系へバージョンアップ
Spring Bootの1.2.x系が出ていたので、バージョンアップする。
versionを1.2.0に。
pom.xml(抜粋)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.0.RELEASE</version>
</parent>
WicketApplicationのアノテーションは@SpringBootApplication
にまとめる。
WicketApplication.java(抜粋)
@SpringBootApplication
public class WicketApplication extends WebApplication {
テストケースの基本形
Springのコンテキスト設定の解決のため、@RunWith
アノテーションと@ContextConfiguration
アノテーションをつける。
またWicketの場合はテストメソッドに @DirtiesContext
アノテーションをつけておかないと、複数のテストを実行した場合に初期化処理で失敗する。
FooPageTest.java
@RunWith(SpringJUnit4ClassRunner. class)
@ContextConfiguration(classes = { WebInitializer.class, WicketApplication.class })
public static class FooPageTest {
@Autowired
private WicketApplication wicketApplication;
private WicketTester sut;
@Before
public void setUp() throws Exception {
sut = new WicketTester(wicketApplication);
}
@Test
@DirtiesContext
public void FooPageが表示される() {
sut.startPage(FooPage.class);
sut.assertRenderedPage(FooPage.class);
sut.assertLabel("label", "Hello, Spring Boot + Wicket!");
}
}
Mockitoの利用
Spring BootではMockitoが用意されているので、スタブを使ったテストもしたい。Wicket-Springを使ったテストとほぼ変わらないが、@SetUP
部分でスタブを設定するように書き換える。
FooPageTest
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { WebInitializer.class, WicketApplication.class })
public static class FooPageTest {
@Autowired
private WicketApplication wicketApplication;
private ApplicationContextMock applicationContextMock;
private WicketTester sut;
@Before
public void setUp() throws Exception {
sut = new WicketTester(wicketApplication);
// スタブの作成
applicationContextMock = new ApplicationContextMock();
sut.getApplication().getComponentInstantiationListeners()
.add(new SpringComponentInjector(sut.getApplication(), applicationContextMock));
IBarService mock = mock(IBarService.class);
when(mock.createMessage()).thenReturn("it is mocked!");
applicationContextMock.putBean("barService", mock);
}
@Test
@DirtiesContext
public void FooPageが表示される() {
sut.startPage(FooPage.class);
Sat. assertRenderedPage (FooPage. class);
sut.assertLabel("label", "it is mocked!");
}
}
なお、ここまでのコードはgishi-yama/wicket-on-spring-boot/tree/180eecd5c7にpushしてある。