XmlStubs

Présentation

XML-Stubs a pour objectif de faciliter le développement des applications web en se substituant au "modèle", défini par des interfaces. Le comportement obtenu est décrit dans un fichier XML. L'utilisation du langage Jexl permet de rendre ce comportement dépendant des paramètres et donc de couvrir un grand nombre de cas d'utilisation.

Configuration

Le fichier XML décrit pour chaque méthode de l'interface simulée le comportement désiré, avec une condition optionnelle permettant de simuler différents cas en fonction des paramètres d'appel. Le format XML est décrit ici.

Utilisation

Pour utiliser les stubs, il suffit de créer un contexte et de lui passer les données XML de configuration, soit sous forme de stream, soit sous forme de fichier via context.setConfig(String path). Dans ce dernier cas, les modifications apportées au fichier seront prise en compte à chaud.

	StubBeansContext context = new StubBeansContext();
        InputStream stream = getClass().getClassLoader().getResourceAsStream("net/sf/azote/xmlstubs/beans.xml");
        
        context.init(stream);
        
        IFoo foo = (IFoo) context.getStubBeanAsProxy("fooXMLStub");  

Description du format XML de configuration

Intégration avec jUnit / DbUnit / StrutsTestCase

Le package net.sf.azote.xmlstubs.support.junit propose des classes permettant une utilisation simplifiée des XMLSTubs dans des classes jUnit. A chaque classe de test peut être associé le fichier XML d'un contexte XMLStubs. Ces données sont automatiquement chargées lors du setUp et les objets sont accessibles via la méthode getStub() pour préparer l'environnement de test.

Intégration avec Spring

Il est possible d'utiliser des XMLStubs suir une application utilisant le framework Spring. XMLStubsFactoryBean permet de retourner des objets d'un contexte Stub défini par la propriété config (chemin du fichier XML). La propriété id permet de définir le stub ciblé.

Une simple modification dans web.xml pour remplacer la configuration du contexte Spring par une configuration de test utilisant XMLStubs permet de passer dans un mode "simulé" très éfficace en maquettage ou pour tester des cas aux limites d'une application web.

L'exemple ci-dessous montre la configuration de Spring pour utiliser ce FactoryBean. Ce fichier XML devra être référencé dans le web.xml de l'application à la place de la configuration de production de Spring.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE beans 
  PUBLIC "-//SPRING//DTD BEAN//EN" 
  "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
	<bean id="myBusinessObject" singleton="true" 
	         class="net.sf.azote.xmlstubs.support.spring.XMLStubsFactoryBean"
	         init-method="init">
	  <description>Bean de maquettage</description>
	  
	  <property name="id">
	  	<value>stubBO</value>
	  </property>
	  
	  <property name="config">
	  	<value>C:/myStubs.xml</value>
	  </property>
	  
	</bean>		
</beans>    

La classe StubsFactoryBean permet de manipuler un contexte Spring statique et d'y enregistrer des objets stubs. Ceux-ci seront retournés par les mécanismes standards de Spring. On peut ainsi développer une classe de test StrutsTestCase pour une application utilisant Spring pour lier les actions aux objets métier.
L'exemple ci-dessous initialise un test StrutsTestCase (test en mode Mock) en enregistrant un objet Mock créé par easyMock dans le contexte Spring de simulation (il est évidement possible de faire de même avec un Stub).

    public void setUp() throws Exception
    {
        super.setUp();
        this.newsManagerControl = MockControl.createControl(INewsManager.class);
        this.newsManager = (INewsManager) this.newsManagerControl.getMock();

        setContextDirectoryForMavenProject();
        // Enregistrement du composant métier dans le pseudo-contexte
        ServletContext ctx = this.getActionServlet().getServletContext();
        SpringSupport.registerStub(ctx, "news", this.newsManager, INewsManager.class);
    }    

Téléchargement

La version 1.0.3 est disponible sur sourceforge.

Dépendances

XMLStubs requiert les packages suivants :

  • commons-jexl-1.0-beta-2
  • commons-digester-1.5
  • commons-collections-2.1
  • commons-beanutils-1.6.1
  • commons-logging-1.0.4

Remarques, suggestions...

Si vous avez des souhaits, des suggestions ou des anomalies à signaler, mailez-moi.


Comme le précise la license Apache utilisée, ce logiciel est fourni sans garantie ni engagement de ma part.

Support This Project