Nach dem Lesen des Posts " Wie überprüft man, ob die Methode ein Attribut hat? "Ich bin ein Schritt, um ein Problem zu lösen, das mich wach hält.
(Ich arbeite mit ASP.Net MVC 4)
Diese Schnittstellen :
%Vor%Diese abstrakte Klasse :
%Vor%Dieser Controller:
%Vor%Diese abstrakte Klasse (für Tests)
%Vor% Und schließlich hat diese Klasse von SuperHeroTest
geerbt, um SuperManController
zu testen:
Methode MethodHasAuthorizeAttribute
ist: (aus dem obigen Beitrag)
Der Aufruf MethodHasAuthorizeAttribute(() => superHeroFlyable.Fly())
in SuperHeroTest
gibt false
zurück, wenn true
zurückgegeben werden soll.
(Die implementierte Methode Fly
in Klasse SuperManController
hat das Attribut Authorize
).
Ich habe das Attribut Authorize
in der Methode Fly
in IFlyable
hinzugefügt und dann true
zurückgegeben.
Wie kann ich erreichen, dass MethodHasAuthorizeAttribute
die Implementierung und nicht die Schnittstelle überprüft?
Mit einigen Änderungen an der IfSuperHeroCanFlyMustHaveAuthorizeAttribute () -Methode können Sie es zum Laufen bringen.
Überprüfen Sie zuerst, ob Ihr Controller die IFlyable-Schnittstelle implementiert. Wenn ja, rufen Sie die MethodInfo für die Fly-Methode des Controllers ab. Dann müssen Sie nur die Attribute für die zurückgegebene MethodInfo überprüfen. Auf diese Weise prüfen Sie, ob die Implementierung das Attribut anstelle der Schnittstelle hat.
Folgendes funktioniert OK:
%Vor%Tags und Links asp.net-mvc c# unit-testing reflection custom-attributes