Là một phần của một thử nghiệm đơn vị tôi đang cố gắng để thử giá trị trả về của FormsIdentity.Ticket.UserDataMocking FormsIdentity.Ticket.UserData với Moq
Sau đây sẽ KHÔNG làm việc nhưng nó sẽ cho một ý tưởng về những gì tôi cố gắng để làm:
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);
mã tôi cố gắng để kiểm tra trông giống như sau:
FormsIdentity fIdentity = HttpContext.Current.User.Identity as FormsIdentity;
string userData = fIdentity.Ticket.UserData;
Tất cả tôi muốn làm trong bài kiểm tra đơn vị của tôi là giả giá trị trả về từ FormsIdentity.Ti cket.UserData. Nhưng khi tôi chạy mã trong phần đầu tiên, tôi gặp lỗi khi cố gắng giả lập FormsIdentity. Lỗi nói kiểu gõ giả phải là một giao diện, lớp trừu tượng hoặc lớp không bị niêm phong.
Tôi đã cố gắng sử dụng IIdentity thay vì FormsIdentity (FormsIdentity là triển khai IIdentity) nhưng IIdentity không có .Ticket.UserData.
Vậy làm cách nào tôi có thể viết bài kiểm tra này để tôi nhận được một giá trị từ FormsIdentity.Ticket.UserData?
Hóa ra phương pháp tôi đã cố gắng thử nghiệm đã được thực hiện quá nhiều. Nó đã vi phạm các mô hình trách nhiệm duy nhất mà đã làm cho nó khó khăn để kiểm tra. Tôi đã từ khi tái cấu trúc phương pháp. Đối với câu hỏi gốc - nó không xuất hiện có bất kỳ cách nào để tạo FormsIdentity.Ticket.UserData vì nó là một phần của một lớp được niêm phong – codette