Smock, ou comment tester un webService

Dans le cadre de ma mission actuelle, je devais réécrire quelques webservices qui utilisaient de vieilles librairies pas forcement adaptées au mapping XML (Castor, en l’occurence…).
Sauf que, bien sûr, je n’avais pas le droit de tout casser (quelle surprise !), et j’ai donc dû m’assurer que le contrat du webservice n’était pas rompu, et en particulier que le mapping XML du webservice mappait toujours les classes de la même façon. Je vais donc vous parler d’une librairie bien utile pour cela : Smock.

Smock teste les “entrées/sorties” d’un webservice : on lui donne un XML en entrée, il l’envoie au webservice, et il nous rend le XML de sortie. On peut donc s’assurer que l’interface du webservice n’est pas modifiée.

On se retrouve au final à écrire quelque chose d’assez simple :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import net.javacrumbs.smock.http.cxf.server.servlet.AbstractSmockServerTest;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:test-appContext.xml"})
public class WebServiceTest extends AbstractSmockServerTest {

  @Value("wsPath")
  String wsPath;

  @Test
  public void getPersonByUid(){
    sendRequestTo(wsPath, withMessage("GetPersonByUid/GetPersonByUidRequest.xml"))
      .andExpect(message("GetPersonByUid/GetPersonByUidResponse.xml"));
  }
}

Le webservice est déclaré dans la config Spring comme d’habitude, ce qui permet de soit faire un test d’intégration vraiment complet, soit mocker les services et tester uniquement la partie “mapping” du webservice.

On a également la possibilité d’écrire des requêtes et/ou réponses XML modulables, en utilisant le GroovyTemplateProcessor.

1
2
3
4
sendRequestTo(WS_PATH,
  withMessage("GetPersonByUid/GetPersonByUidRequest.xml")
    .withParameter("uid", uid))
  .andExpect(message("GetPersonByUid/GetPersonByUidResponse.xml"));

Cette librairie m’a permis entre autres de me rendre compte que j’étais en train de modifier les namespaces de mes objets, par exemple…

VN:R_U [1.9.22_1171]
Rating: 0 (from 0 votes)
Share
Ce contenu a été publié dans Java, avec comme mot(s)-clef(s) , , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire