Вы не можете смоделировать методы расширения, вам придется смоделировать то, что происходит внутри метода расширения, чтобы он возвращал желаемое значение.
Чтобы убедиться, что NameWithoutDomain
возвращает то, что вы хотите, выможет смоделировать IIdentity
и заставить его вернуть желаемое имя пользователя, например:
var identityMock = new Mock<IIdentity>();
identityMock.SetupGet(x => x.Name).Returns("UsernameWithoutDomain");
Если вы хотите проверить, что NameWithoutDomain
делает то, что должен, то есть разбивает строку, тогда вы пишетеотдельный тест, который вызывает этот метод расширения.
Что касается HttpContext
, вы можете просто создать его экземпляр перед созданием контроллера и передать ему проверенный IIdentity
, например, так ( протестирован сWebAPI2 ):
var identityMock = new Mock<IIdentity>();
identityMock.SetupGet(x => x.Name).Returns("UsernameWithoutDomain");
HttpContext.Current =
new HttpContext(new HttpRequest(null, "http://test.com", null), new HttpResponse(null))
{
User = new GenericPrincipal(identityMock.Object, new[] {"Role1"})
};
var myController = new AccountController();
Затем, когда вы создаете экземпляр вашего контроллера для тестирования, HttpContext.Current.User.Identity.Name
вернет UsernameWithoutDomain
.Удачного тестирования!: -)