2009-07-16 17 views
0

Ich habe einen benutzerdefinierten Aktionsfilter (Attribut) erstellt, die eine Datenbank trifft. Wie kann ich die Controller-Aktionen testen, indem ich ein Mock-Repository einfüge (so dass es die Datenbank für den Komponententest nicht wirklich trifft), damit der Aktionsfilter verwendet wird?Einheit testen benutzerdefinierte Aktion Filter

+0

Ich denke, dass ich einen Basiscontroller mit einer Eigenschaft für das IRepository habe. Der Aktionsfilter kann dann den Controller aus dem Kontext abrufen, ihn in den Basis-Controllertyp umwandeln (vorausgesetzt, der Cast ist erfolgreich) und Zugriff auf das IRepository erhalten. Es kann dann das Repository verwenden, das auf dem Controller festgelegt wurde. Dies ist ein Nachahmer aus einem Komponententest. –

+0

Zwei Dinge, die mich in diesem Zusammenhang betreffen: 1) Wie kann ich sicherstellen, dass der benutzerdefinierte Filter nicht auf einen Controller angewendet wird, der nicht vom Basiscontroller erbt? 2) Ich habe gerade festgestellt, dass der Custom-Action-Filter nicht einmal von einem Komponententest aufgerufen wird, da ich die Aktion direkt als Funktionen z. controller.Index(). Wie kann ich es testen? –

Antwort

0

Ich hatte die gleiche Frage vor ein paar Wochen.

How do I unit test an ActionFilter in ASP.NET MVC?

Am Ende akzeptierte ich, dass ich den Controller ohne den Filter zu testen und testen Sie die Filter selbst.

+0

Danke für die Info, aber es erklärt nicht, wie der Action-Filter mit einem Mock-Repository arbeiten kann, das ich aus dem Komponententest injizieren kann. –

0

Sie können immer StructureMap oder ein anderes Service-Locator-ish-Muster verwenden.

Verwandte Themen