WicketTesterで単体テストをするときも、そのApplicationをコンストラクタに渡せば、そのSessionを使ってテストができます。
しかしこれは単体テストとしては今ひとつ。できればApplicationに依存しないテストを書きたい。Applicationのテストをしたいのではなく、Componentのテストをしたいのだ–。
MockApplicationを使う
何か適当な解決策はないものか、と考えたところで思いついたのが、MockApplicationを継承して使うという方法でした。
MockApplicationはWicketTesterのデフォルトコンストラクタが呼ばれたときに使用されるApplicationのため、もっともシンプルな解決策ではないかと考えました。
というわけで、MockApplication.newSessionをオーバーライドすれば独自のSessionが使えることを確認する試験を書きました。WicketTesterを起動した後、Sessionを取得して型を検査しています。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.apache.wicket.Session; | |
import org.apache.wicket.mock.MockApplication; | |
import org.apache.wicket.protocol.http.WebApplication; | |
import org.apache.wicket.protocol.http.WebSession; | |
import org.apache.wicket.request.Request; | |
import org.apache.wicket.request.Response; | |
import org.apache.wicket.util.tester.WicketTester; | |
import org.junit.Test; | |
import static org.junit.Assert.*; | |
public class SetSessionTest { | |
@Test | |
public void testSessionCreated() { | |
WebApplication app = new MockApplication() { | |
public Session newSession(Request request, Response response) { | |
return new CustomizedSession(request); | |
} | |
}; | |
WicketTester tester = new WicketTester(app); | |
Session session = Session.get(); | |
assertTrue(session instanceof CustomizedSession); | |
} | |
static class CustomizedSession extends WebSession { | |
CustomizedSession(Request request) { | |
super(request); | |
} | |
} | |
} |