/ ^(?!\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 символов.
Используя 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);
я думаю, что синтаксис Насмешек Носорога подобен.
Вот отрывок из ссылки 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
...
Или можно сделать это с Изолятором Typemock без потребности отправить в поддельном контроллере вообще:
Isolate.WhenCalled(()=>HttpContext.Request.HttpMethod).WillReturn("Get");
я закончил с этой спецификацией
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));
}
}
, обладают
Я нахожу что долго насмешка процедуры быть слишком большим трением.
лучший способ, которым мы нашли - использование ASP.NET MVC на реальном проекте - состоит в том, чтобы абстрагировать HttpContext к интерфейсу IWebContext, который просто проходит. Тогда можно дразнить IWebContext без боли.
Вот пример
Процедура, кажется, немного изменилась в 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);