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.
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.
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
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.
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.
<?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); }
La version 1.0.3 est disponible sur sourceforge.
XMLStubs requiert les packages suivants :
Si vous avez des souhaits, des suggestions ou des anomalies à signaler, mailez-moi.