2011-06-21 14 views
1

私はWicketを使い始めました。私はGuiceを依存性注入フレームワークとして選択しました。今、WebPageオブジェクトの単体テストを書く方法を学びたいと思っています。wicketとAtUnit

私はちょっとグーグルで見つけました。this postが見つかりましたが、AtUnitに言及しましたので、試してみることにしました。

私のWebPageクラスは、私はそれを持つ任意の生産MyServiceImplを置き換えるためにモックを作成し、この

public class MyWebPage extends WebPage 
{ 
    @Inject MyService service; 
    public MyWebPage() 
    { 
     //here I build my components and use injected object. 
     service.get(id); 
     ....  
    } 
} 

のように見えると私はGuiceのはAtUnitと手でそれを注入する必要があることを推測します。

は、今の問題は、次のとおりです。

  1. AtUnitは私が@Unitで対象オブジェクトをマークすることを期待する - 私はWicketTester

    @Unit MyWebPage page = new MyWebPage(); 
    wicketTester.startPage(page); 
    

    にすでに作成されたオブジェクトを渡しますが、通常はIすることができますよう、それは大丈夫ですクラス名でstartPageを呼び出します。

  2. 私はAtUnitがAtUnitを作成し、それを管理できるように、ターゲットオブジェクトは@Injectと市場があることにも期待していだと思う - 私はorg.apache.wicket.WicketRuntimeExceptionを取得する:現在のスレッドのメインに添付アプリケーションが存在しません。 AtUnitにwicketTesterのアプリケーションを使用するよう指示することはできますか?

  3. 私は本当に見つけることができない私は

(私の例では、サービスの参照がnull)のGuiceによって注入されなければならないすべてのオブジェクトがnullです(と思う)MyWebPageで@Injectを使用していないのでWicket環境内のAtUnitに関するもの。間違ったことをしていますか?

答えて

0

私はAtUnitを知らないが、私はguiceとTestNGでwicketを使用する。私はAtUnitが同じように動作するはずだと思います。重要な点は、guiceを使用してWebアプリケーションを作成することです。

ここで私のテストのためにすべてのものを結び付けています。

public abstract class TesterWicket<T extends Component> { 

@BeforeClass 
    public void buildMockedTester() { 
     System.out.println("TesterWww.buildMockedTester"); 
     injector = Guice.createInjector(buildModules()); 
     CoachWebApplicationFactory instance = 
      injector.getInstance(CoachWebApplicationFactory.class); 
     WebApplication application = instance.buildWebApplication(); 
     tester = new WicketTester(application); 
    } 

protected abstract List<Module> buildModules(); 

初期化は、すべてのテストクラスのために行われます。

は、私はすべての私のテストのための抽象基本クラスを持っています。サブクラスは、buildModulesメソッドのテストに必要なモジュールを定義します。

私のIWebApplicationFactoryには、GuiceComponentInjectorが追加されています。 、すべてのコンポーネントのインスタンス化した後、@InjectでアノテートフィールドはGuiceので満たされているその方法:

public class CoachWebApplicationFactory implements IWebApplicationFactory { 

    private static Logger LOG = LoggerFactory.getLogger(CoachWebApplicationFactory.class); 

    private final Injector injector; 

    @Inject 
    public CoachWebApplicationFactory(Injector injector) { 
     this.injector = injector; 
    } 

    public WebApplication createApplication(WicketFilter filter) { 
    WebApplication app = injector.getInstance(WebApplication.class); 
    Application.set(app); 
    app.addComponentInstantiationListener(new GuiceComponentInjector(app, injector)); 
    return app; 
    } 
} 
+0

OK、これを共有するためのおかげで、まだWicketTesterで使用するための最良のlibないAtUnitと思います。私はあなたの方法に従うと思います。 – kamiseq

+0

これはWicket> 1.5では動作しなくなりました。 – weltraumpirat