6

私は通常、Seleniumを使用したテストを最小限に抑え、昔ながらのバックエンドテスト(JUnit、モック)の使用を最大限に活用しようとしています。Tapestryでは、コールバック関数で発生する「魔法」のために、後者の方法でページとコンポーネントをテストするのが難しいと感じています。

あなたはこれを解決することができましたか?それとも、Webレイヤー全体(ページ、コンポーネント)にSeleniumを使用しているだけですか?

4

2 に答える 2

3

TapeTesterを使用したTapestryのドキュメントによると、ページとコンポーネントの単体テストを行う適切な方法です:https ://tapestry.apache.org/unit-testing-pages-or-components.html

ただし、これはHtmlUnitスタイルのWebテストに似ているように見えます。これは、ページやコンポーネントのインターフェイスではなく、インターフェイスのようなWebブラウザーを介して対話が行われるためです。

編集

ページの簡単な単体テストを試しましたが、非常にうまく機能します。

public class FooPageTest extends AbstractServiceTest{

    @Autobuild
    @Inject
    private FooPage fooPage;

    @Test
    public void setupRender(){
        fooPage.setupRender();
    }

}

AbstractServiceTestは、単体テストクラスにタペストリーの依存性注入を提供するテストランナーを提供します。Autobuildを使用すると、FooPageの@Inject依存関係が満たされ、コンポーネントインジェクションと@Property注釈付き要素については、別のことを理解する必要があります。

于 2010-08-27T12:27:40.887 に答える
0

Timoの提案を具体化するためだけに:

public class AbstractServiceTest
{
    @Before
    public void before() throws IllegalAccessException {
        // startupRegistry();
        injectServices();
    }

    private void injectServices() throws IllegalAccessException {
        for(Field field : getClass().getDeclaredFields()) {
            field.setAccessible(true);

            if(field.isAnnotationPresent(Inject.class)) 
                field.set(this, registry.getService(field.getType()));

            if(field.isAnnotationPresent(Autobuild.class))
                field.set(this, registry.autobuild(field.getType()));
        }
    }
}

これで、テストにフィールドが適切に挿入されます。@Injectサービス(インターフェース)と@Autobuild実装(クラス)を覚えておいてください

于 2017-09-02T19:04:33.987 に答える