4

私は wicket と guice を連携させようとしてきました。より具体的には、ファサード (またはコントローラーなど) を guice を使用して Web ページに挿入します。問題は、Webページでフィールドインジェクション以外のインジェクションを行うことができないことです。セッター注入を使用しようとすると、セッターが呼び出されません。Web ページへのコンストラクターの挿入は可能ではないようです (または方法がわかりませんでした)。

そのため、Webページに注入するときの唯一の可能性として、フィールド注入が残っているようです。

まず第一に、これが正しいことを誰かが確認できますか? Apache のサイトで、ウィケット 1.5 の時点でセッター インジェクションが機能しないことを発見したようですが (ちなみに私は 6 を使用しています)、これ以上の情報は見つかりませんでした。

第二に、実際に Web ページでしかフィールド インジェクションを実行できない場合、Guice を使用してフィールド インジェクションをきれいに単体テストするにはどうすればよいでしょうか。(私は模擬テストについて考えています。私が知る必要があるのは、問題のファサードがボタンを押した後に正しい引数で正しく呼び出されることだけです。ファサード自体は別の単体テストでテストできます)。

質問はかなり基本的なように見えるため、コードを提供しませんでした。必要に応じて、いくつかのスニペットを挿入します

カスパー

4

3 に答える 3

3

I had been struggling with this too. The integration ended up really smooth:

http://software.danielwatrous.com/wicket-guice-including-unittests/

Following this method the injector is injected, which gives full flexibility.

于 2012-10-15T17:00:53.907 に答える
0

私が知っている限りでは、wicket IoCモジュールはコンポーネントのフィールドインジェクトのみを提供するため、セッターからコンポーネントに何かをインジェクトする簡単な方法はありません。これは、Wicket-IoC/Wicket-Guiceのソースコードを読むことで確認できます。

挿入されたフィールドをクリアするには、JavareflationAPIを使用してそのフィールドを作成しますnull。ただし、ページはテスト後に何らかの状態になる可能性があります。したがって、各テストの後にページを再作成することをお勧めします。

于 2012-10-06T18:31:19.787 に答える
0

模擬テストを行う Guice で Wicket を使用します。ここですべてをバインドする方法を見ることができますhttp://blog.yanivkessler.com/2010/05/wicket-and-guice-alternate-route.html (私のコメントは Gaetan の下にあります)

インジェクションは Component コンストラクターによって行われるため、テストは問題になりません。私の場合、ユーザーの操作に応じて、モックされたサービスの呼び出しをチェックするコンポーネントの小さなテストがあります。

これは、テストの初期化の簡略化されたバージョンです。

  @BeforeClass
  public void buildMockedTester() {
    List<Module> modules = buildModules();
    injector = Guice.createInjector(modules);
    MyApplicationFactory instance = injector.getInstance(MyApplicationFactory.class);
    WebApplication application = instance.buildWebApplication();
    tester = new WicketTester(application);
}
于 2012-10-08T07:45:58.397 に答える