Automatisierte Tests mit C# in eigener AppDomain starten

In C# existiert die Möglichkeit, automatisierte Testfälle in einer eigenen AppDomain zu starten.
Der Vorteil von AppDomains ist, dass alle Aktionen in einem separaten Bereich ausgeführt werden. Anwendungsdomänen helfen dabei, den ausführenden Code von den anderen Bereichen zu isolieren und nach der Ausführung nicht benötigte Referenzen zu entladen.

Microsoft beschreibt den Anwendungsbereich der AppDomains auf der MSDN Seite wie folgt:

  • Verwenden Sie Anwendungsdomänen, um Aufgaben zu isolieren, die einen Prozess zum Absturz bringen könnten. Wenn der Zustand der AppDomain, in der eine Aufgabe ausgeführt wird, instabil wird, kann die AppDomain ohne Auswirkungen auf den Prozess entladen werden. Dies ist wichtig, wenn ein Prozess über einen längeren Zeitraum ohne Neustart ausgeführt werden muss. Sie können auch Anwendungsdomänen verwenden, um Aufgaben zu isolieren, die keine Daten gemeinsam verwenden sollten.
  • Wenn eine Assembly in die Standardanwendungsdomäne geladen wird, kann sie während der Ausführung des Prozesses nicht aus dem Speicher entladen werden. Wenn Sie hingegen eine zweite Anwendungsdomäne zum Laden und Ausführen der Assembly öffnen, wird die Assembly beim Entladen dieser Anwendungsdomäne entladen. Verwenden Sie dieses Verfahren, um das Workingset von Prozessen mit langer Laufzeit zu minimieren, die gelegentlich große DLLs verwenden.

Die einfachste Möglichkeit die Methode einer Klasse in einer AppDomain auszuführen, ist die Benutzung der Methode „CreateInstanceFromAndUnwrap“.

var sample_domain = AppDomain.CreateDomain("Domain Name");
var test = (TestClass)sample_domain.CreateInstanceFromAndUnwrap(typeof(TestClass).Assembly.Location, typeof(TestClass).FullName);
test.Start(param1, param2);

AppDomain.Unload(sample_domain);
  • Als erstes wird eine neue AppDomain angelegt.
  • Anschließend wird eine neue Instanz der Beispiel-Klasse „TestClass“, mit Hilfe der Methode „CreateInstanceFromAndUnwrap“ erstellt.
  • Nach dem Erstellen der Instanz, kann auf die Methoden der Klasse „TestClass“ zugegriffen werden. In dem Beispiel wird die Start Methode mit zwei Parametern aufgerufen.
  • Als letztes wird nach der Ausführung die AppDomain „sample_domain“ wieder mit der AppDoain.Unload() Methhode entladen.
0 Kommentare

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert