Как дразнить Запрос на Контроллере в ASP.NET MVC?

Я немного не в курсе подробностей того, как MySQL работает с нулями, но вот две вещи, которые нужно попробовать:

SELECT * FROM match WHERE id NOT IN 
    ( SELECT id FROM email WHERE id IS NOT NULL) ;

SELECT
    m.*
FROM
    match m
    LEFT OUTER JOIN email e ON
        m.id = e.id
        AND e.id IS NOT NULL
WHERE
    e.id IS NULL

Второй запрос выглядит противоречащим интуитивно, но он выполняет условие соединения. а затем условие где. Это тот случай, когда объединения и предложения не эквивалентны.

169
задан Nissan 9 June 2009 в 18:09
поделиться

4 ответа

Использование Moq :

var request = new Mock<HttpRequestBase>();
// Not working - IsAjaxRequest() is static extension method and cannot be mocked
// request.Setup(x => x.IsAjaxRequest()).Returns(true /* or false */);
// use this
request.SetupGet(x => x.Headers).Returns(
    new System.Net.WebHeaderCollection {
        {"X-Requested-With", "XMLHttpRequest"}
    });

var context = new Mock<HttpContextBase>();
context.SetupGet(x => x.Request).Returns(request.Object);

var controller = new YourController();
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);

ОБНОВЛЕНО:

Mock Request.Headers ["X-Requested-With"] или Запросите ["X-Requested-With"] вместо Request.IsAjaxRequest () .

206
ответ дан 23 November 2019 в 20:52
поделиться

Вам нужно имитировать HttpContextBase и поместить его в свойство ControllerContext, например:

controller.ControllerContext = 
new ControllerContext(mockedHttpContext, new RouteData(), controller);
3
ответ дан 23 November 2019 в 20:52
поделиться

Is AjaxRequest - это метод расширения. Таким образом, вы можете сделать это с помощью Rhino следующим образом:

    protected HttpContextBase BuildHttpContextStub(bool isAjaxRequest)
    {
        var httpRequestBase = MockRepository.GenerateStub<HttpRequestBase>();   
        if (isAjaxRequest)
        {
            httpRequestBase.Stub(r => r["X-Requested-With"]).Return("XMLHttpRequest");
        }

        var httpContextBase = MockRepository.GenerateStub<HttpContextBase>();
        httpContextBase.Stub(c => c.Request).Return(httpRequestBase);

        return httpContextBase;
    }

    // Build controller
    ....
    controller.ControllerContext = new ControllerContext(BuildHttpContextStub(true), new RouteData(), controller);
5
ответ дан 23 November 2019 в 20:52
поделиться

Вот рабочее решение с использованием RhinoMocks. За основу я взял решение Moq, которое я нашел на http://thegrayzone.co.uk/blog/2010/03/mocking-request-isajaxrequest/

public static void MakeAjaxRequest(this Controller controller)
{
        MockRepository mocks = new MockRepository();

        // Create mocks
        var mockedhttpContext = mocks.DynamicMock<HttpContextBase>();
        var mockedHttpRequest = mocks.DynamicMock<HttpRequestBase>();

        // Set headers to pretend it's an Ajax request
        SetupResult.For(mockedHttpRequest.Headers)
            .Return(new WebHeaderCollection() {
                {"X-Requested-With", "XMLHttpRequest"}
            });

        // Tell the mocked context to return the mocked request
        SetupResult.For(mockedhttpContext.Request).Return(mockedHttpRequest);

        mocks.ReplayAll();

        // Set controllerContext
        controller.ControllerContext = new ControllerContext(mockedhttpContext, new RouteData(), controller);
}
13
ответ дан 23 November 2019 в 20:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: