Ich habe mvc Anwendung und ich arbeite mit poco Objekte und Schreibgerät Test. Problem ist, dass alle meine Tests fehlschlagen, wenn sie diese Codezeile erreichen. Roles.IsUserInRole ("someUser", "role"). Soll ich eine neue Schnittstelle oder ein Repository für Rollen oder ... implementieren? ThxUnit Test (mvc) -Problem mit Rollen
Antwort
Ich hatte das gleiche Problem beim Versuch, die Roles.IsUserInRole-Funktionalität in meinen codierten Unit-Tests zu verspotten. Meine Lösung war, eine neue Klasse namens Roleprovider und eine Schnittstelle mit der Methode IsUserInRole zu erstellen, die dann die System.Web.Security.Roles.IsUserInRole genannt:
public class RoleProvider: IRoleProvider
{
public bool IsUserInRole(IPrincipal userPrincipal)
{
return System.Web.Security.Roles.IsUserInRole(userPrincipal.Identity.Name, "User");
}
}
Dann in meinem Code nenne ich die Roleprovider IsUserInRole Methode. Wie Sie eine Schnittstelle können Sie die IRoleProvider in Ihren Tests dann verspotten, hier gezeigten Beispiel wird unter Verwendung von Rhino Mocks:
var roleProvider = MockRepository.GenerateStub<IRoleProvider>();
roleProvider.Expect(rp => rp.IsUserInRole(userPrincipal)).Return(true);
Hoffnung, das hilft.
Thx, das funktioniert für mich (: – Cipiripi
Dies ist sehr gut für die Testbarkeit. Ein bisschen ärgerlich, dass meine Controller jetzt eine Instanz von RoleProvider benötigen. Kann am Ende eine Basis-Controller-Klasse erstellen, die dies eingebaut hat (zusammen mit einigen anderen gängigen Eigenschaften/Felder). Danke für den Vorschlag! – Killnine
Sie können eine benutzerdefinierte Methode einrichten, um Rollen zu überprüfen, die sich in Tests anders verhalten, aber ich bevorzuge, dass die Tests einen Kontext einrichten, der mit den Standardmethoden funktioniert.
Sie einen leichten Wrapper mit einem Prädikat/Func erstellen.
public static Predicate<string> IsUserInRole = role => Roles.IsUserInRole(role);
Dann nutzen IsUserInRole() anstelle von Roles.IsUserInRole(). Zur Laufzeit erhalten Sie das gleiche Verhalten. Aber bei Testzeit können Sie die Funktion außer Kraft setzen, so dass sie nicht die Roleprovider zugreift
MyClass.IsUserInRole = role => true;
Wenn Sie es vorziehen, nicht eine öffentliche statische haben Sie die Prädikats über Ihren Konstruktor injizieren könnte und speichern Sie es als Privat nur lesbar.
class MyClass
{
private readonly Predicate<string> IsUserInRole;
MyClass(Predicate<string> roleChecker) { this.IsUserInRole = roleChecker }
MyClass() : this(role => Roles.IsUserInRole(role)) { }
}
Wenn Sie Moq verwenden, können Sie ein Mock zurückkehren und steuern dann den Rückgabewert und/oder überprüfen Sie die Methode aufgerufen wurde. Und prüfen Sie, welcher Parameterwert an das Prädikat gesendet wurde.
Mock<Predicate<string>> mockRoleChecker = new Mock<Predicate<string>>();
var cut = new MyClass(mockRoleChecker.Object);
var expectedRole = "Admin";
mockRoleChecker.SetReturnsDefault<bool>(true); // if not specified will return false which is default(bool)
cut.MyMethod();
mockRoleChecker.Verify(x => x(expectedRole), Times.Once());
- 1. Unit Test Problem mit assertRaises
- 2. Unit-Test mit Mock in MVC
- 3. Unit-Test mit NSURLConnection
- 4. ASP.NET MVC Rendern In Unit-Test anzeigen
- 5. MVC Moq Unit Test Void-Methode
- 6. Spring4 MVC Unit-Test kompiliert nicht
- 7. Unit-Test mit mockresourcerequest
- 8. Grundeinheitstest vs. Unit Test
- 9. Spring MVC Unit Test Ausgabe mit PowerMock dependecy
- 10. PHP-Debugger mit Unit-Test
- 11. Unit-Test mit einer Eingabedatei
- 12. Springboot Unit Test Autowired
- 13. ASP.NET MVC Rollen Authorization
- 14. AngularJs Unit Test Speicherlecks
- 15. Unit Test Federmvc mit Feder-Test und Junit
- 16. Unit-Test-Funktionen mit Nebenwirkungen?
- 17. Unit-Test mit Android Volley
- 18. Unit Test onSaveInstanceState mit ActivityRules
- 19. Unit-Test benutzerdefinierte RoleProvider mit Moq?
- 20. Unit-Test SessionScoped Klasse
- 21. Java: Unit Test Bildmanipulationen
- 22. Unit Test mathematischen Code
- 23. Unit-Test eine Funktion Aufruf RenderPartialViewToString auf MVC 3
- 24. Unit-Test-3-mal
- 25. Verify Methode Moq werfen Fehler in ASP.NET MVC-Unit-Test
- 26. Unit Test Sockets
- 27. Unit Test Wrapper Objekte?
- 28. Disable Unit Test MSTest
- 29. ASP.NET MVC: Unit-Test-Controller, die UrlHelper verwenden
- 30. CXF-Unit-Test
Es gibt nicht genug Informationen hier, um Ihre Frage zu beantworten. Bitte überlege, Code zu überarbeiten/hinzuzufügen/Details zu deiner Frage hinzuzufügen. – Kendrick
Warum scheitern sie? Können Sie Details der Ausnahme und des verwendeten Frameworks posten? In den meisten Frameworks werden Ausnahmetypen verwendet, die fehlschlagen. Daher kann es sich um einen Fehler oder eine Ausnahme handeln, die durch die Isolation für den Test verursacht wird. – StuperUser
Ich habe Rolltests im Controller ähnlich wie [Unit-Testing-Security-Model-Clickonce] (http://stackoverflow.com/questions/4585174/unit-testing-security-model-clickonce/4585686#4585686) – k3b