2010-06-10 9 views
2

Ma question est:Unité de test XML indépendant du fichier XML physique

Dans JUnit, comment les données XML de configuration pour mon système sous test (SUT) sans le SUT lu à partir d'un fichier XML physiquement sur le le système de fichiers

Contexte:

Je donne un fichier XML qui contient des règles pour la création d'une facture. Mon travail consiste à convertir ces règles du XML en Objets Java, par ex. S'il y a une étiquette comme ci-dessous dans mon fichier XML qui indique que, après une période de 30 jours, la transaction ne peut être facturé

<ExpirationDay>30</ExpirationDay> 

cela correspond à une classe Java, par exemple ExpirationDateInvoicingRule

J'ai class InvoiceConfiguration qui doit prendre le fichier XML et créer les objets * InvoicingRule. Je pense à l'aide de Stax pour analyser le document XML dans InvoiceConfiguration

Problème:

Je veux InvoiceConfiguration de test unitaire. Mais je ne veux pas que InvoiceConfiguration lise physiquement un fichier xml sur le système de fichiers. Je veux que mon test unitaire soit indépendant de tout fichier xml physique stocké. Je veux créer une représentation XML dans la mémoire. Mais un analyseur StAX prend uniquement FileReader (ou je peux jouer avec l'objet fichier)

Répondre

0

gars Merci pour votre aide. Une autre bonne source est ce lien: http://marc.info/?l=xerces-j-dev&m=86952145010437&w=2

Ceci est la réponse de Baq Haidri

----- Original Message ----- De: Baq Haidri [mailto: @ .. bhaidri ..]

Je trouve cela dans un livre intitulé 'Professional XML' par l'édition Wrox:

> 
>public void parseString(String s) throws SAXException, IOException 
>{ 
>   StringReader reader = new SringReader(s); 
>   InputSource source = new InputSource(reader); 
>   parser.parse(source); 
>} 

0

Refactorisez votre code pour prendre un lecteur au lieu d'ouvrir un fichier. L'ouverture du fichier peut être faite séparément (et est en grande partie impossible à tester si vous voulez respecter la règle de ne pas accéder aux fichiers dans les tests unitaires - mais c'est OK, parce que c'est juste une ligne et vous ne pouvez pas vous tromper!)