LoginSignup
1
2

More than 5 years have passed since last update.

Spring Boot + Apache Wicket (2)

Last updated at Posted at 2014-12-29

概要

前回は、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してある。

参考文献

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2