W ramach testów jednostkowych próbuję mock wartość zwracaną FormsIdentity.Ticket.UserDataMocking FormsIdentity.Ticket.UserData z Min
Poniższa nie będzie działać, ale powinien dać wyobrażenie o tym, co ja próbuje zrobić:
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);
Kod próbuję testu wygląda mniej więcej tak:
FormsIdentity fIdentity = HttpContext.Current.User.Identity as FormsIdentity;
string userData = fIdentity.Ticket.UserData;
Wszystko chcę zrobić w moim badanej jednostki jest fałszywy wartość zwracana z FormsIdentity.Ti cket.UserData. Ale kiedy uruchamiam kod w pierwszej sekcji, pojawia się błąd przy próbie wyśmiewania FormsIdentity. Błąd mówi, że typem do sfałszowania musi być interfejs, klasa abstrakcyjna lub klasa niezapieczętowana.
Próbowałem użyć IIdentity zamiast FormsIdentity (FormsIdentity jest implementacją IIdentity), ale IIdentity nie ma .Ticket.UserData.
Więc jak mogę napisać ten test tak, aby uzyskać wartość od FormsIdentity.Ticket.UserData?
Okazuje się metodę Próbowałem testu robił zbyt wiele. To naruszało wzór odpowiedzialności, który utrudniał testowanie. Od tamtej pory refaktoryzowałem metodę. Co do pierwotnego pytania - nie wydaje się, że jest jakiś sposób, aby drwić FormsIdentity.Ticket.UserData ponieważ część klasy, która jest uszczelniona – codette