2011-01-12 11 views
4

Ich möchte MSTest teilweise vertrauenswürdig ausführen. Dies würde es mir erlauben, zu konfigurieren, was der Code, den meine Unit-Tests aufrufen, tun kann und was nicht.Ausführen von MSTest in Teilvertrauensstellung innerhalb von Visual Studio

Das Problem, das ich versuche zu lösen, ist, meine automatisierten (Einheits-) Tests fehlschlagen zu lassen, wenn Dinge wie das Dateisystem, die Datenbank, die Systemuhr und andere externe Ressourcen verwendet werden. Durch teilweises Vertrauen kann ich konfigurieren, welche Art von Aktionen die AppDomain ausführen darf und was nicht. Dadurch kann ich Stellen im Code erkennen, die die verwendeten Ressourcen nicht korrekt abstrahieren.

Wenn es andere Möglichkeiten gibt, um dies zu erreichen, lass es mich wissen.

+0

Möchten Sie den Berechtigungssatz steuern können, unter dem ein einzelner Test ausgeführt wird, oder versuchen Sie, mehrere Durchläufe einer Testgruppe durchzuführen, indem Sie bei jedem Lauf einen anderen Berechtigungssatz anwenden? –

+0

@Nicole: Danke für Ihre Antwort. Ich würde mich freuen, wenn es möglich wäre, alle Tests in einem einzigen Projekt innerhalb desselben Berechtigungssatzes durchzuführen, andernfalls würde ein pro Lösungssatz ausreichen. Pro Test wäre nicht erforderlich. – Steven

+0

Wird die Zielberechtigungsgruppe für ein Projekt zur Entwurfszeit festgelegt, oder möchten Sie die Berechtigungsgruppe beim Ausführen der Tests dynamisch festlegen können? –

Antwort

2

Leider hat MSTest keinen eingebauten Mechanismus dafür, und Änderungen an CAS-Richtlinienanwendung in .NET 4.0 haben die unterstützten Ansätze dafür stark eingeschränkt.

Der einfachste Ansatz hierfür wäre, die CAS-Berechtigungsgewährung für die von MSTest erstellte AppDomain zu beschränken, um die Tests in einer bestimmten Testassembly auszuführen. Aktuelle Versionen von MSTest erlauben jedoch keine Überwachung und/oder Anpassung der AppDomain-Erstellung. Wir können das nicht umgehen, indem wir einer AssemblyInitialize-Methode Code hinzufügen, da Änderungen der AppDomain-Richtlinie, die nach dem Start von Code in der AppDomain vorgenommen wurden, keine Auswirkungen haben.

Dies lässt uns im Grunde mit einem einzigen unterstützten Mechanismus zum Anwenden von CAS-Berechtigungseinschränkungen für das Testen: Anwenden einer PermissionSet.PermitOnly aus einer Testmethode oder einem Code, der die Testmethode aufruft. z.B .:

[TestMethod] 
public void SomeTest() 
{ 
    SomeStaticTestUtilityClass.TargetPermissionSet.PermitOnly(); 

    // Run the rest of your test code here. 
} 

Es kann möglich sein, dieser Test über benutzerdefinierte tun Attribute den Ansatz bei http://blogs.msdn.com/b/vstsqualitytools/archive/2009/09/04/extending-the-visual-studio-unit-test-type-part-1.aspx beschrieben ist. Ich habe dies jedoch nicht getestet, und ich bin mir nicht sicher, ob der Mechanismus zum Aufrufen der Testmethode das Anwenden von PermitOnly in einer Weise ermöglichen würde, die dazu führen würde, dass es für den getesteten Code auf dem Aufruf-Stack vorhanden ist.

Wenn Sie eine Menge von diesen zu Autor und Verwendung eines benutzerdefinierten ITestMethodInvoker entweder nicht arbeiten oder sonst ungeeignet, eine andere Option wäre, einen Post-Compiler wie PostSharp verwenden, um die PermitOnly Aufrufe einzufügen.

Wenn nichts davon passt und Sie nicht mit MSTest verheiratet sind, sollten Sie auch in Betracht ziehen, Ihr Testframework in ein Framework zu ändern, das einfacher erweiterbar ist.

+0

Vielen Dank für Ihre umfassende Antwort. – Steven

Verwandte Themen