私は通常、Seleniumを使用したテストを最小限に抑え、昔ながらのバックエンドテスト(JUnit、モック)の使用を最大限に活用しようとしています。Tapestryでは、コールバック関数で発生する「魔法」のために、後者の方法でページとコンポーネントをテストするのが難しいと感じています。
あなたはこれを解決することができましたか?それとも、Webレイヤー全体(ページ、コンポーネント)にSeleniumを使用しているだけですか?
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注釈付き要素については、別のことを理解する必要があります。
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実装(クラス)を覚えておいてください