2012-03-30 5 views
2

Ich benutze Pex und Moles für meine Low-Level-Unit-Tests, aber ich erkunde auch MSpec für Business-Logik-Validierung, und möchte Moles für Konsistenz verwenden. Das Problem, denke ich, ist, dass MSPec anonyme Methoden verwendet, so dass es keine Möglichkeit gibt, das Attribut HostType ("Moles") anzuwenden. Zum Beispiel:Gibt es eine Problemumgehung zum Festlegen von [HostType ("Moles")] beim Umgang mit anonymen Methoden in MSpec?

Because of =() => 
    employeeList = EmployeeManager.GetUsersByRoles(rolesToLoad); 

It should_return_a_list_of_employees =() => 
    employeeList.ShouldNotBeNull(); 

ich die Rollen-Provider spöttischer innerhalb namens „GetUsersByRoles,“ und wenn ich versuche, diesen Test über MSpec zu laufen, habe ich den Standard „Moles erfordern Tests in einem instrumentierten Prozess zu sein“ Fehler , mit der Anweisung, [HostType ("Moles")] zu meiner Testmethode hinzuzufügen. Gibt es eine Problemumgehung oder eine andere Option hier?

Seitennotiz: Ich habe MSMSpec.tt heruntergeladen und modifiziert, um das Attribut in die generierten VSTests aufzunehmen, aber ich möchte die MSpec-Tests direkt über einen eigenen Runner oder TestDriven.net ausführen können, so dass ich kann Holen Sie sich die freundliche Ausgabe für BAs und Geschäftsinhaber.

Antwort

1

Die Problemumgehung besteht darin, die anonyme Methode durch eine zu ersetzen, die dies nicht ist. Moling Mspec ist grundsätzlich nicht möglich.

Moles ist nicht in der Lage, anonyme Methoden zu umgehen. Der Grund dafür ist, dass die Methoden adressierbar sein müssen, um umgeleitet zu werden. Anonyme Methoden sind nicht implizit adressierbar, da sie zur Laufzeit generiert und referenziert werden. Einfach gesagt, können Sie keine anonyme Methode durch die Klasse aufrufen, denn es ist, naja ... anonym.

Die Moles Manual Staaten, "Moles kann verwendet werden, um alle .NET-Methode, einschließlich nicht-virtuelle und statische Methoden in versiegelten Typen umfahren." Daher ist die Annahme, dass Moles Reflexion verwendet, um Klassenmitglieder zu identifizieren, eine sichere Sache. Alles, was nicht über Delegate, Action oder Func aufgerufen werden kann, kann nicht geändert werden.

+0

Danke, Mike, das ist eine hilfreiche Erklärung. Ich muss herausfinden, ob es ein gutes Framework gibt, das leicht mit MSpec und Pex/nativen VS-Tests verwendet werden kann. –

+0

Schade, dass Moles nicht mit MSPEC funktioniert. Weiß jemand, ob das Microsoft Fakes-Projekt in VS 2011 (einschließlich Maulwürfe Funktionalität unter anderem) dies funktioniert? – Alexis

Verwandte Themen