Re: Scripter les tests
Régis Le Brettevillois <[email protected]> Mon, 11 Apr 2011 11:05:43 +0200
| Newsgroups | gmane.comp.java.french.general |
|---|---|
| Message-ID | <[email protected]> |
En fait il faut séparer ce qu'expose le langage Groovy et comment
c'est implémenté. Groovy fonctionne sur la JVM et étend la syntaxe et
les mécanismes de Java.
Ton delegate est du type de la classe que tu lui affecteras, par
exemple ça peut être ta classe utilitaire de test Java.
Un peu de code valant un grand discours, je te joins un petit POC en
exemple, il mélange Groovy et Java
Une classe Java, SeleniumHelper qui expose la logique Selenium sous
forme simple:
package selenium.test;
public class SeleniumHelper {
public void login(String user, String password) {
System.out.println("Connection avec " + user + " password " +
password);
}
public void selectionne(String seleniumId) {
System.out.println("Selection de " + seleniumId);
}
}
Une classe Groovy, TestScript qui fournit la base pour executer une
closure dans le contexte Selenium:
package selenium.test
class TestScript {
static def test(Closure c) {
c.delegate = new SeleniumHelper()
c.call()
}
}
Un script Groovy qui implémente un test:
import selenium.test.TestScript
def testListe() {
// une fonction sans classe
}
TestScript.test {
login "john", "doe"
selectionne "composantId"
}
Et finalement le résultat dans le stdout
Connection avec john password doe
Selection de composantId
A lire, mais désolé rien en open content pour l'instant:
Groovy in Action! (Manning)
Making Java Groovy (Manning)
On Mon, 11 Apr 2011 10:08:00 +0200, Jean-Baptiste BRIAUD -- Novlog
<[email protected]> wrote:
> Mais alors, dans ce code Groovy :
>
> TestScript.execute {
> login x,y
> selectionne "nom"
> ...
> }
>
> C'est qui le delegate de login et de selectionne ? Object ?
> Si oui, j'ai toujours ma question sur le mapping dans Java puisque je
> ne peux pas ajouter de méthode à Object, à moins que je fournisse
> une sous-classe ?
> Si Groovy cherche dynamiquement la méthode, çà pourrait le faire
> ... c'est çà ?
>
> Autres questions :
> - est-ce que tout est forcement objet ou bien est-il possibvle
> d'avoir une fonction (pas une methode de classe) ?
> - une ressource à lire genre "Thinking in Java pour Groovy" ? Je
> vais faire fonctionner Google, mais si tu as une bonne ressource à
> recommander ...
>
> On 10 avr. 2011, at 21:05, Régis Le Brettevillois wrote:
>
> C'est naturel mais faut-il encore avoir une idée de comment faire
> ;)
>
> En fait dans mon petit exemple il faut voir que execute() de la
> classe TestScript (que tu peux voir comme une classe Java, d'ailleurs
> ç'en est une) est une méthode statique qui prend en paramètre une
> closure (un bloc de code java en gros, mais sous forme d'objet)
> En groovy tu vas avoir l'opportunité de dire que l'ensemble des
> méthodes invoquées au sein de la closure sont invoquées sur un
> objet spécifique (appelé le delegate), en gros le code présenté
> est équivalent de quelque chose comme:
>
> TestScript.execute(new Runnable() {
> Object execute() {
> delegate.login(x,y);
> delegate.selectionne("nom");
> ...
> }
> }
>
> D'ailleurs j'aurais presque pu l'écrire comme ça, en fait toute la
> simplicité de Groovy (ou de Scala) vient du fait que la syntaxe est
> relaxée (pas besoin de classe anonyme, pas de nécessité de ;, pas
> de nécessité de parenthèse là où il n'y en pas besoin, pas
> besoin
> de classes quand ce n'est pas nécessaire, etc.)
>
> Pour ce qui est de l'IDE il suffit de choisir le seul qui est
> valable pour coder ;)
>
> N'hésites pas à poser des questions supplémentaires, Groovy et
> Scala vont bientôt régner sur les JVMs
>
> Le 09/04/2011 13:43, [email protected] [1] a écrit :
> L'intérêt de groovy est juste une integration de java
> naturelle...je
> n'y vois pas de souci particulier ...
>
> ---- Envoyé avec BlackBerry® d'Orange ----
> -------------------------
>
> FROM: Jean-Baptiste BRIAUD -- Novlog [2]
> DATE: Sat, 9 Apr 2011 13:28:21 +0200
> TO: java Java [3]
> SUBJECT: Re: Scripter les tests
>
> Exactement ce que j'envisage !
> Groovy semble donc un excellent candidat.
> Il y a cependant un point qui reste obscur pour moi : comment relier
> ce qui semble être des instructions (selectionne, login, ...) avec
> des "bonnes vielles" méthodes Java ?
>
> On 9 avr. 2011, at 07:45, Régis Le Brettevillois wrote:
>
> Oui avec le support DSL des langages de script comme Groovy ou Scala
> c'est tout à fait possible. Mais même avec le langage lui même de
> doit pouvoir faire quelque chose de beaucoup plus simple.
> Groovy a l'avantage d'être assez proche de Java dans la syntaxe ce
> qui permet d'avoir rapidement quelque chose, Scala apporte beaucoup
> de
> changement dans la syntaxe, mais bénéficie de meilleures
> performances et d'abstractions encore plus poussées.
>
> Par exemple, en Groovy tu pourras écrire quelque chose telle que:
>
> TestScript.execute {
> login x,y
> selectionne "nom"
> ...
> }
>
> En plus tu pourras bien sûr utiliser les structure de controles du
> langage pour introduire une logique plus complexe.
>
> TestScript.execute {
> login x,y
> elements = selectionne "liste"
> elements.each { el ->
> ...
> }
> if (valeur("seleniumId") == ) ...
> ...
> }
>
>
>
> Links:
> ------
> [1] mailto:[email protected]
> [2] mailto:[email protected]
> [3] mailto:[email protected]