В рамках модульного тестирования Я пытаюсь издеваться возвращаемым значением FormsIdentity.Ticket.UserDataMocking FormsIdentity.Ticket.UserData с Moq
Следующие НЕ будет работать, но он должен дать представление о том, что я пытаясь сделать:
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);
код Я пытаюсь тест выглядит примерно так:
FormsIdentity fIdentity = HttpContext.Current.User.Identity as FormsIdentity;
string userData = fIdentity.Ticket.UserData;
Все, что я хочу сделать в моем модульном тестировании является поддельным возвращаемым значением FormsIdentity.Ti cket.UserData. Но когда я запускаю код в первом разделе, я получаю сообщение об ошибке при попытке издеваться над FormsIdentity. Ошибка говорит, что тип moker должен быть интерфейсом, абстрактным классом или незапечатанным классом.
Я попытался использовать IIdentity вместо FormsIdentity (FormsIdentity - это реализация IIdentity), но у IIdentity нет .Ticket.UserData.
Итак, как я могу написать этот тест, чтобы получить значение из FormsIdentity.Ticket.UserData?
Оказываются, метод, который я пытался тест делал слишком много. Это нарушало шаблон единой ответственности, который затруднял проверку. У меня с тех пор был реорганизован метод. Что касается оригинального вопроса - не существует никакого способа издеваться над FormsIdentity.Ticket.UserData, поскольку он является частью закрытого класса. – codette