Unité testant une application qui communique avec Microsoft Word via OpenXML

Je suis en train de modifier une application qui parle beaucoup avec Microsoft Word. COM interop est actuellement utilisé mais je dois le changer en Open XML. J’aimerais vous présenter des tests unitaires pour cela, mais je ne sais pas comment faire.

C’est l’une des opérations par exemple: Un document mot modèle contient des signets. L’application remplit les signets avec des données dynamics. Puis-je vérifier si cela s’exécute correctement?

Pour effectuer des tests unitaires de ce type, vous devez concevoir des joints aux limites entre votre application et le code externe (Word, dans ce cas).

Par exemple, considérons le code suivant:

var bookmarks = document.MainDocumentPart.Document.Body.Descendants(); DoStuffWithBookmarks(bookmarks); // Imagine we want to unit test this method 

Tout code qui appelle un code externe comme celui-ci ne peut pas être testé à l’unité , car il est étroitement associé au code externe. Autrement dit, vos tests testeraient votre code et le code externe , ce qui introduirait un grand nombre de pièces mobiles et de nombreuses possibilités de rupture de votre test.

Pour remédier à cela, vous introduisez une couche d’abstraction entre votre code et le code externe. Cela vous permet de tester votre code en remplaçant le code externe par des doubles de test .

Travailler avec l’exemple ci-dessus:

 var bookmarks = bookmarkProvider.GetBookmarks(); DoStuffWithBookmarks(bookmarks); 

Dans votre test unitaire, vous devez remplacer bookmarkProvider par un double test, ce qui vous permet de contrôler totalement les conditions qui vous intéressent.

Votre version de production de bookmarkProvider transmet essentiellement son invocation au code externe:

 IEnumerable GetBookmarks() { var wordBookmarks = m_document.MainDocumentPart.Document.Body.Descendants(); return ConvertToOurBookmarks(wordBookmarks); // wordBookmarks is external code! } 

Remarque: dans cet exemple, la méthode ne renvoie pas directement les objects Word – votre code restrait donc étroitement associé au code externe. (Ainsi, non seulement le processus de récupération des signets est abstrait, mais les signets eux-mêmes le sont également.)

Cela peut sembler beaucoup de travail inutile au début, mais le fait de pouvoir tester votre code de manière totalement isolée portera ses fruits.