Gewusst wie: hinzufügen Ansprüche in einem mock "ClaimsPrincipal"
Ich versuche, unit-test-meine-controller-code, der bekommt die Informationen aus den "claimsprincipal".Aktuelle.
In der controller-code, den ich
public class HomeController {
public ActionResult GetName() {
return Content(ClaimsPrincipal.Current.FindFirst("name").Value);
}
}
Ich versuche zu verspotten, meine "ClaimsPrincipal" - mit Behauptungen, aber ich habe noch nicht alle mock-Wert aus der Forderung.
//Arrange
IList<Claim> claimCollection = new List<Claim>
{
new Claim("name", "John Doe")
};
var identityMock = new Mock<ClaimsIdentity>();
identityMock.Setup(x => x.Claims).Returns(claimCollection);
var cp = new Mock<ClaimsPrincipal>();
cp.Setup(m => m.HasClaim(It.IsAny<string>(), It.IsAny<string>())).Returns(true);
cp.Setup(m => m.Identity).Returns(identityMock.Object);
var sut = new HomeController();
var contextMock = new Mock<HttpContextBase>();
contextMock.Setup(ctx => ctx.User).Returns(cp.Object);
var controllerContextMock = new Mock<ControllerContext>();
controllerContextMock.Setup(con => con.HttpContext).Returns(contextMock.Object);
controllerContextMock.Setup(con => con.HttpContext.User).Returns(cp.Object);
sut.ControllerContext = controllerContextMock.Object;
//Act
var viewresult = sut.GetName() as ContentResult;
//Assert
Assert.That(viewresult.Content, Is.EqualTo("John Doe"));
Den viewresult.Inhalt ist leer wie kann ich das ausführen der unit-test. Jede Hilfe, ob ich hinzufügen können, die mock-Anspruch. Danke.
InformationsquelleAutor Henry | 2016-07-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste, Ihnen fehlt diese Zeile in Ihrem test:
(und dann reinigen Sie es im TearDown).
Zweitens, wie @trailmax erwähnt, Spott wichtigsten Objekte ist unpraktisch. In deinem Fall
ClaimsPrincipal.FindFirst
(nach der dekompilierte Quellcode) sieht in den privaten Bereichen der its-Instanz, das ist der Grund, Spott half nicht.Ich lieber mit zwei einfachen Klassen, die mir erlauben, unit-test-claims-basierte Funktionen:
dann Ihre test schrumpft bis:
und es geht nun, habe ich gerade überprüft.
ClaimsPrincipal
? Da wenn ich auf google, viele Menschen, die ist lustigClaimsPrincipal
. Wie dieses, stackoverflow.com/questions/14190066/....Du bist herzlich willkommen 🙂 in dieser Antwort, die Annahme, dass SUT nur rufen HasClaim Methode, ist zu fragil. Wenn eines Tages SUT (vielleicht 3rd-party-code) muss der Zugriff auf weitere Mitglieder der Rektor, die test brechen. Ich oft lieber manuell Unterklassen Abhängigkeiten und deren Umsetzung in einen "test-Weise", während ich sicherstellen, dass Sie immer noch konsequent Verhalten.
Genial! Funktionierte perfekt für mich. Danke!!!
InformationsquelleAutor felix-b
Brauchen Sie nicht zu verspotten
ClaimsPrincipal
es ist nicht außerhalb von Abhängigkeiten und können Sie es erstellt haben un-verspottet:Und ich bin mir nicht sicher, was Sie testen hier. Sicherlich "John Doe" wird nicht ein Teil von
viewResult.Content
denn es ist nie festgelegt worden.InformationsquelleAutor trailmax