2010-08-27 10 views
4

En général, j'essaie de minimiser les tests avec Selenium et de maximiser l'utilisation des tests back-end simples (JUnit, moqueurs). Avec Tapestry, j'ai du mal à tester les pages et les composants de cette façon en raison de la «magie» qui se produit avec les fonctions de rappel.Test des pages et des composants de Tapestry avec JUnit

Avez-vous été en mesure de résoudre ce problème? Ou utilisez-vous simplement Selenium pour toute la couche Web (pages, composants)?

Répondre

3

Selon la documentation de tapisserie à l'aide PageTester est la façon appropriée de faire des tests unitaires de pages et composants: http://tapestry.apache.org/tapestry5/guide/unit-testing-pages.html

Mais cela semble similaire aux tests Web de style HtmlUnit que l'interaction se produit par le biais d'un navigateur Web comme interface et non via l'interface de la page ou du composant.

Modifier

Je viens d'essayer une unité simple test pour les pages et il fonctionne très bien:

public class FooPageTest extends AbstractServiceTest{ 

    @Autobuild 
    @Inject 
    private FooPage fooPage; 

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

} 

AbstractServiceTest fournit un coureur de test qui permet l'injection de dépendance de tapisserie à la classe de test unitaire. Avec Autobuild vous obtenez les dépendances @Inject du FooPage satisfaites et pour les injections de composants et les éléments annotés @Property vous aurez besoin de trouver quelque chose d'autre.

0

Juste pour Concrétiser sur la suggestion de 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())); 
     } 
    } 
} 

Vous aurez alors correctement les champs injectés dans vos tests. Souvenez-vous de vos services @Inject (interfaces) et de vos implémentations @Autobuild (classes)