Насмешка контекста контроллера Asp.net-mvc

/ ^(?!\d{0,6},\d{0,6},\d{0,6})(?=\d[\d,]{6}\d).{8}$/

Я предполагаю, что это сотрудничество положительного и отрицательного взгляда делает именно то, что задают. Если вы удалите разделители начала и конца и установите флаг g, тогда он попытается сопоставить шаблон с десятичными строками длиной более 8 символов.

Попробуйте http://regexr.com / 3d63m

Объяснение: Отрицательный взгляд вперед (?!\d{0,6},\d{0,6},\d{0,6}) пытается не найти никаких запятых бок о бок, если они имеют 6 или менее десятичных символов между ними, в то время как положительный взгляд вперед (?=\d[\d,]{6}\d) пытается найти 6 знаков десятичной или запятой между двумя десятичными символами. И последний .{8} выбирает 8 символов.

68
задан Maksym Kozlenko 22 February 2013 в 04:39
поделиться

6 ответов

Используя MoQ это выглядит примерно так:

var request = new Mock<HttpRequestBase>();
request.Expect(r => r.HttpMethod).Returns("GET");
var mockHttpContext = new Mock<HttpContextBase>();
mockHttpContext.Expect(c => c.Request).Returns(request.Object);
var controllerContext = new ControllerContext(mockHttpContext.Object
, new RouteData(), new Mock<ControllerBase>().Object);

я думаю, что синтаксис Насмешек Носорога подобен.

64
ответ дан Haacked 24 November 2019 в 14:16
поделиться

Вот отрывок из ссылки Jason. Это совпадает с методом Phil, но использует носорога

Примечание: mockHttpContext. Запрос заблокирован для возврата mockRequest прежде , внутренности mockRequest погашены. Я полагаю, что этот порядок требуется.

// create a fake web context
var mockHttpContext = MockRepository.GenerateMock<HttpContextBase>();
var mockRequest = MockRepository.GenerateMock<HttpRequestBase>();
mockHttpContext.Stub(x => x.Request).Return(mockRequest);

// tell the mock to return "GET" when HttpMethod is called
mockRequest.Stub(x => x.HttpMethod).Return("GET");            

var controller = new AccountController();

// assign the fake context
var context = new ControllerContext(mockHttpContext, 
                  new RouteData(), 
                  controller);
controller.ControllerContext = context;

// act
...
19
ответ дан Dane O'Connor 24 November 2019 в 14:16
поделиться

Или можно сделать это с Изолятором Typemock без потребности отправить в поддельном контроллере вообще:

Isolate.WhenCalled(()=>HttpContext.Request.HttpMethod).WillReturn("Get");
7
ответ дан RoyOsherove 24 November 2019 в 14:16
поделиться

я закончил с этой спецификацией

public abstract class Specification <C> where C: Controller
{
    protected C controller;

    HttpContextBase mockHttpContext;
    HttpRequestBase mockRequest;

    protected Exception ExceptionThrown { get; private set; }

    [SetUp]
    public void Setup()
    {
        mockHttpContext = MockRepository.GenerateMock<HttpContextBase>();
        mockRequest = MockRepository.GenerateMock<HttpRequestBase>();

        mockHttpContext.Stub(x => x.Request).Return(mockRequest);
        mockRequest.Stub(x => x.HttpMethod).Return("GET");


        EstablishContext();
        SetHttpContext();

        try
        {
            When();
        }
        catch (Exception exc)
        {
            ExceptionThrown = exc;
        }
    }

    protected void SetHttpContext()
    {
        var context = new ControllerContext(mockHttpContext, new RouteData(), controller);
        controller.ControllerContext = context;
    }

    protected T Mock<T>() where T: class
    {
        return MockRepository.GenerateMock<T>();
    }

    protected abstract void EstablishContext();
    protected abstract void When();

    [TearDown]
    public virtual void TearDown()
    {
    }
} 

, и сок здесь

[TestFixture]
public class When_invoking_ManageUsersControllers_Update :Specification   <ManageUsersController>
{
    private IUserRepository userRepository;
    FormCollection form;

    ActionResult result;
    User retUser;

    protected override void EstablishContext()
    {
        userRepository = Mock<IUserRepository>();
        controller = new ManageUsersController(userRepository);

        retUser = new User();
        userRepository.Expect(x => x.GetById(5)).Return(retUser);
        userRepository.Expect(x => x.Update(retUser));

        form = new FormCollection();
        form["IdUser"] = 5.ToString();
        form["Name"] = 5.ToString();
        form["Surename"] = 5.ToString();
        form["Login"] = 5.ToString();
        form["Password"] = 5.ToString();
    }

    protected override void When()
    {
        result = controller.Edit(5, form);
    }

    [Test]
    public void is_retrieved_before_update_original_user()
    {
        userRepository.AssertWasCalled(x => x.GetById(5));
        userRepository.AssertWasCalled(x => x.Update(retUser));
    }
}

, обладают

2
ответ дан Tom H 24 November 2019 в 14:16
поделиться

Я нахожу что долго насмешка процедуры быть слишком большим трением.

лучший способ, которым мы нашли - использование ASP.NET MVC на реальном проекте - состоит в том, чтобы абстрагировать HttpContext к интерфейсу IWebContext, который просто проходит. Тогда можно дразнить IWebContext без боли.

Вот пример

0
ответ дан Matt Hinze 24 November 2019 в 14:16
поделиться

Процедура, кажется, немного изменилась в MVC2 (я использую RC1). Решение Фила Хаака для меня не работает, если действие требует определенного метода ([HttpPost], [HttpGet]). Похоже, что метод проверки этих атрибутов изменился. Теперь MVC проверяет request.headers, request.Form, и request.QueryString на значение X-HTTP-Method-Override.

Если вы добавите мокри для этих свойств, то это сработает:

var request = new Mock<HttpRequestBase>();
request.Setup(r => r.HttpMethod).Returns("POST");
request.Setup(r => r.Headers).Returns(new NameValueCollection());
request.Setup(r => r.Form).Returns(new NameValueCollection());
request.Setup(r => r.QueryString).Returns(new NameValueCollection());

var mockHttpContext = new Mock<HttpContextBase>();
mockHttpContext.Expect(c => c.Request).Returns(request.Object);
var controllerContext = new ControllerContext(mockHttpContext.Object, new RouteData(), new Mock<ControllerBase>().Object);
10
ответ дан 24 November 2019 в 14:16
поделиться
Другие вопросы по тегам:

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