У меня есть прибор модульного тестирования, в котором я пытаюсь протестировать действие ControllerAction на контроллере ASP.NET MVC, который используется для функций членства в веб-приложении. Я пытаюсь издеваться над HttpContext для тестов. Тестируемое действие ControllerAction фактически устанавливает свойства для HttpContext, такие как значения Session, значения Response.Cookies и т. Д. Это не весь код, но вот приблизительный пример теста, который я пытаюсь запустить :
[Test]
public void ValidRegistrationDataSuccessfullyCreatesAndRegistersUser()
{
var context = new Mock<HttpContextBase>() {DefaultValue = DefaultValue.Mock};
context.SetupAllProperties();
var provider = new Mock<MembershipProvider>(new object[] {context.Object});
var controller = new AccountController(context.Object, provider.Object);
// This just sets up a local FormCollection object with valid user data
// in it to use to attempt the registration
InitializeValidFormData();
ActionResult result = controller.Register(_registrationData);
Assert.IsInstanceOfType(typeof(ViewResult), result);
// Here is where I'd like to attempt to do Assertions against properties
// of the HttpContext, like ensuring that a Session object called "User"
// exists, and new auth cookie exists on the Response.Cookies collection.
// So far I've been unable to successfully check the values of those properties.
// I've been unsuccessful in getting those properties setup correctly on my
// mock object so that my ControllerAction can actually *set* their values,
// and that I can make assertions on them afterwards. The above code actually
// generates a StackOverflowException (which I've reported) on the
// context.SetupAllProperties() call. What am I doing wrong, or what do I need
// to do to be able to set and assert on those context properties?
}
Не уверен, что я делаю не так, но мне бы понравилось, если бы кто-нибудь указал мне правильное направление и показал, как настроить этот фиктивный объект HttpContextBase так, чтобы мой контроллер мог фактически устанавливать значения для его свойств, Я могу сделать утверждения для этих свойств, чтобы убедиться, что моя ControllerAction делает то, что мне нужно.
Я неправильно подхожу к этому? Я знаю, что контроллеры MVC имеют ControllerContext, который я могу использовать для установки значений для Session и т. Д., Но я не могу понять, как что-то подобное можно смоделировать, не вводя его. Есть ли способ сделать это вместо этого? (Мне также нужно иметь возможность передать контекст моему членству MembershipProvider). Это был бы лучший подход?
Спасибо.