Насмешка над HttpContext для получения словаря элемента формы контекста формы - PullRequest
0 голосов
/ 29 сентября 2011

Мы используем MVC3, для наших модульных тестов мы используем RhinoMocks в наших модульных тестах.Когда запрос начинается, мы проверяем домен, с которого он поступил, и сопоставляем его с клиентом.Этот клиент хранится в HttpContext.Items.Большинству контроллеров эта информация нужна для их работы.

var mocks = new MockRepository();
using (var controller = new TestController())
{
    HttpContext context = 
        MockRepository.GenerateStub<HttpContext>();

    Customer customer = new Customer { Key = "testKey" };
    context.Items["Customer"] = customer;

    controller.ControllerContext = 
        new ControllerContext { 
            Controller = controller, 
            RequestContext = 
                new RequestContext(
                    new HttpContextWrapper(context), 
                    new RouteData()
                    ) 
        };
       ...

В этом примере кода показано, в основном, что необходимо, однако заглушка недопустима, поскольку HttpContext является «запечатанным» классом.Контроллер принимает HttpContextBase (насмешка над этим много), но он не предоставляет свойство Items.

Мысли никому?Или даже лучше решение; -)

1 Ответ

5 голосов
/ 29 сентября 2011

Создание заглушки HttpContextBase и создание заглушки для ее свойства Items позволит вам использовать словарь Items:

        HttpContextBase context =
            MockRepository.GenerateStub<HttpContextBase>();

        Customer customer = new Customer { Key = "testKey" };
        context.Stub(c => c.Items).Return(new Dictionary<string, object>());
        context.Items["Customer"] = customer;
...