Я издеваюсь над HTTPContext в некоторых методах тестирования. У меня есть много методов, которые мне нужно написать, поэтому я бы предпочел повторно использовать код, чем писать каждый раз. Оставайтесь СУХОЙ.Как отключить код модуля тестирования в «Код для повторного использования»?
Я реализую this method of Faking (Mocking) HTTPContext. Я прочитал, что мне нужно разорвать это на Factory, чтобы повторно использовать его в других модульных тестах.
Вопрос: Как я могу поместить этот код в Factory для повторного использования его в Unit-Tests? Есть ли лучший способ, чтобы «фабрика» повторно использовала это? Как я могу это реализовать.
Код проверки
public class MyController : Controller
{
[HttpPost]
public void Index()
{
Response.Write("This is fiddly");
Response.Flush();
}
}
//Unit Test
[Fact]
public void Should_contain_fiddly_in_response()
{
var sb = new StringBuilder();
var formCollection = new NameValueCollection();
formCollection.Add("MyPostedData", "Boo");
var request = A.Fake<HttpRequestBase>();
A.CallTo(() => request.HttpMethod).Returns("POST");
A.CallTo(() => request.Headers).Returns(new NameValueCollection());
A.CallTo(() => request.Form).Returns(formCollection);
A.CallTo(() => request.QueryString).Returns(new NameValueCollection());
var response = A.Fake<HttpResponseBase>();
A.CallTo(() => response.Write(A<string>.Ignored)).Invokes((string x) => sb.Append(x));
var mockHttpContext = A.Fake<HttpContextBase>();
A.CallTo(() => mockHttpContext.Request).Returns(request);
A.CallTo(() => mockHttpContext.Response).Returns(response);
var controllerContext = new ControllerContext(mockHttpContext, new RouteData(), A.Fake<ControllerBase>());
var myController = GetController();
myController.ControllerContext = controllerContext;
myController.Index();
Assert.Contains("fiddly", sb.ToString());
}