SQL Practice Blog – SQL Server, BizTalk und .NET Erfahrungen

Unit Tests mit dem BizTalk Server 2009

leave a comment »

Es ist mal wieder an der Zeit einen technologischen Blog Post zu schreiben. Nachdem ich den ganzen Vormittag über mit Unit Tests für BizTalk Server 2009 Projekte verbracht habe, was würde sich da besser anbieten als darüber gleich einen Blogeintrag zu schreiben.

Mit dem BizTalk Server 2009 und Visual Studio 2008 ist es Entwicklern möglich für ihre BizTalk Projekte Unit Tests zu schreiben. Hierbei werden logischer Weiße nicht die Projekte sondern die Artefakte in den Projekten getestet. Wenn wir von Artefakten reden, meinen wir damit Schemas, Maps und Pipelines.
Im Prinzip ist das Erstellen von Testprojekten recht identisch mit dem Erstellen von normalen Testprojekten für .NET Anwendungen. Hierbei kommt standardmäßig Microsofts Testframework MSTest zum Einsatz. Alternativ kann aber auch z.B. NUnit genutzt werden.

projektmappe Um die Komplexität des Blogeintrages ein wenig in Grenzen zu halten, werde ich mich hier nur auf das Testen von Schemas und Maps beziehen.
Wir starten mit der Projektstruktur, welche auf dem linken Screenshot zu sehen ist.

Hierbei handelt es sich um vier BizTalk Projekte. OrderSystem.Maps beinhaltet alle Maps der Applikation, OrderSystem.Messaging verwaltet alle Message Schemas für die BizTalk Applikation, OrderSystem.Processes ist für die Orchestrations zuständig und OrderSystem.Services beherbergt alle Komponenten für den Zugriffe aus diverse WCF Services. Uns interessieren hierbei jedoch nur die Projekte OrderSystem.Maps, OrderSystem.Messaging und OrderSystem.Tests, in dem sich die Unit Tests später befinden werden.
Wir arbeiten hierbei mit zwei Schemas, eine InputOrder.xsd (Eigehende Bestellung) und eine OutputOrder.xsd (Bearbeitete Bestellung). Desweiteren haben wir in unserem Beispiel noch eine Map, welche die beiden Schemas verbindet.

Aktivieren_UnitTestsBevor ich bei BizTalk Server 2009 Projekten mit dem implementieren für Unit Tests beginnen kann, muss ich die Projekten erst richtig kon-figurieren. Dazu markiere ich mein BizTalk Projekt mit der rechten Maustaste und gehen in die Eigenschaften des Projekts. Unter dem Punkt Bereitstellung (Deployment) muss ich das KeyValue Pair Komponententests aktivieren auf True setzen. Dies muss ich bei jeden BizTalk Assembly tun, welches von den Unit Tests betroffen ist. Sollte ich dies vergessen, so stehen mir zum Zeitpunkt der Implementierung des Tests wichtige Testfunktionen nicht zu Verfügung.

Als nächsten Schritt sollte man ein Test Projekt in Visual Studio anlegen, falls dieses noch nicht existieren sollte. Am einfachsten geht das, wenn man ein BizTalk Projekt markiert und über die Visual Studie Menuleiste auf Tests und dann Test erstellen klickt. Als erstes muss man nun in dem Testprojekt alle benötigten Abhängigkeiten zu euren BizTalk Anwendungen und sonstigen Assemblies einpflegen. Was wird neben euren Projekten noch benötigt? Ihr benötigt unbedingt noch die Microsoft.BizTalk.TestTools und die Micrososft.XLANGs.BaseTypes. Solltet Ihr Pipelines testen wollen, so benötigt ihr außerdem noch die Assemblies Microsoft.BizTalk.Pipeline und Microsoft.BizTalk.PipelineOM.

Das Testen von Schemas

Zum Testen von Schemas benötigt ihr immer eine Inputinstance, dies kann eine native Datei oder eine XML Datei sein. Je nachdem welches Schema man testen möchte. Danach wird eine neue Instance des Schemas erstellt (Achtung! Referenz muss vorhanden sein!), welche dann über die Funktion ValidateInstance prüft ob sie mit der Inputinstance identisch ist. Das ganze sieht im Code dann so aus:

Schema_UnitTest

Das Testen von Maps

Bei dem Testen von Maps ist das Vorgehen ganz ähnlich. Hierzu benötigt man ebenfalls eine InputInstance welche dem Source Schema der Map entspricht. Diese übergibt man der vorher instanziierten Map und bekommt ein OutputSchema zurück, welches man im TestRun Order speichert. Nun muss der selbe Testschritt wie bei den Schemas durchgeführt werden, in dem geprüft wird ob die zurückgegebene Instanz zu dem erwarteten Schema passt. Sollte in dem Mapping ein Fehler auftreten, so sieht der Entwickler das nicht direkt, sondern erhält eine leere Datei als OutputInstance. Deshalb prüft man am Ende diese Datei nochmal gegen das erwartete Schema. Das ganze schaut aus wie folgt:

Map_UnitTest

Hierbei gilt es zu beachten, wenn man Beispielsweise in der Map eine Source aus zwei oder mehr Schemas hat, welche auch noch über verschiedene Projekte verteilt sind, so kann es bei den Test der Maps zu Problemen kommen.

Fazit

Mit Unit Tests ist es auch in BizTalk Server Projekten möglich seine Komponenten einzelnen oder als gesamtes Paket zu testen. Dieser Mehrwert rückt vor allem stark in den Vordergrund wenn eine Team Foundation Server im Einsatz ist, welcher die Tests Automatisiert durchführt. Dies kann die Zusammenarbeit in großen und kleinen Teams ungemein bereichern.

Written by Robert Meyer

März 5, 2010 um 16:26

Veröffentlicht in BizTalk

Tagged with , , ,

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: