Im Rahmen eines Unit-Test-IMocking FormsIdentity.Ticket.UserData mit Moq
Nachstehend ist der Rückgabewert von FormsIdentity.Ticket.UserData zu verspotten versuche wird nicht funktionieren, aber es sollte eine Vorstellung davon, was ich bin versuchen zu tun:
var principal = Mock<IPrincipal>();
var formsIdentity = Mock<FormsIdentity>();
formsIdentity.Setup(a => a.Ticket.UserData).Returns("aaa | bbb | ccc");
principal.Setup(b => b.Identity).Returns(formsIdentity.Object);
der Code, den ich zu Test versuchen etwas wie folgt aussieht:
FormsIdentity fIdentity = HttpContext.Current.User.Identity as FormsIdentity;
string userData = fIdentity.Ticket.UserData;
Alles, was ich in meinem Unit-Test machen will, ist der Rückgabewert von FormsIdentity.Ti Fälschung cket.UserData. Aber wenn ich den Code im ersten Abschnitt ausführe, erhalte ich einen Fehler, wenn ich versuche, die FormsIdentity zu verspotten. Der Fehler besagt, dass der zu überspielende Typ eine Schnittstelle, eine abstrakte Klasse oder eine nicht versiegelte Klasse sein muss.
Ich habe versucht, IIdentity anstelle von FormsIdentity zu verwenden (FormsIdentity ist eine Implementierung von IIdentity) aber IIdentity nicht .Ticket.UserData.
Also wie kann ich diesen Test schreiben, so dass ich einen Wert von FormsIdentity.Ticket.UserData bekomme?
die Methode Stellt sich heraus, ich wurde zu Test versucht wurde zu viel zu tun. Es verletzte das Muster der Verantwortlichkeit, das das Testen erschwerte. Ich habe seit der Methode die Methode überarbeitet. Wie für die ursprüngliche Frage - es erscheint nicht, gibt es eine Möglichkeit, FormsIdentity.Ticket.UserData zu mokieren, da es Teil einer Klasse ist, die versiegelt ist – codette