SAStrutsでActionのValidationユニットテストをしたい
SAStrutsのアクションクラスのユニットテストでついでにバリデーションの検証もしたいななんて思ったんだが、どうやらひがさん曰く、
「Actionのテストをやる場合にはインスタンスを直接newして、依存するサービスとかはコンテナからDIされたものをセットする」
とのこと。
こんな感じ
public class HogeActionTest extends S2TestCase { private HogeAction hogeAction = new HogeAction(); private HogeService hogeService; private HogeForm hogeForm; @Override protected void setUp() throws Exception { super.setUp(); include("app.dicon"); } public void testInsert() { hogeForm.name = "hogehoge"; // ここでnewしたActionに関連クラスをセットする hogeAction.hogeService = hogeService; hogeAction.hogeForm = hogeForm; String html = hogeAction.insert(hogeForm); assertEquals("index.html", html); } }
これもこれでいいんだけど、せっかくユニットテスト書いてるのだからバリデーションのテストもユニットテストでやりたいじゃないですか〜。
んで、ActionクラスもDIコンテナで生成しようと思ったらヌルポが発生〜。
調べてみるとS2ModuleConfigが取得できずに落ちてるみたい。
以下エントリーに回避方法が書いてあるが、これはどうやらアクションクラスのコンポーネントは生成するけど、ActionCustomizerを使わないよって方法なので、バリデーションとかは実行されないみたい。
SAStrutsのJUnitテストでActionに自動DIしたい
ううむ、バリデーションを検証するにはテスト用の独自ActionCustomizerを作らないといけないとかなのかな〜??
それとも、そもそもユニットテストでバリデーション検証を行うのが間違いなのか。。
seleniumやselenium-maven-pluginを駆使してのCIに持っていくべきなのか。。
どうなんだろう。。