Visual Studio 2010, похоже, смешивает вышеупомянутые библиотеки.
Этот пример кода взят из книги «Pro ASP.NET MVC2 Framework» Стивена Сандерсона.
[TestMethod]
public void HomePage_Recognizes_New_Visitor_And_Sets_Cookie()
{
// Arrange: First prepare some mock context objects
var mockContext = new Mock<HttpContextBase>();
var mockRequest = new Mock<HttpRequestBase>();
var mockResponse = new Mock<HttpResponseBase>();
// The following lines define associations between the different mock objects
// (i.e. tells Moq what alue to use for tMockContext.Request)
mockContext.Setup(x=> x.Request).Returns(mockRequest.Object);
mockContext.Setup(x=> x.Response).Returns(mockResponse.Object);
mockRequest.Setup(x=> x.Cookies).Returns(new HttpCookieCollection());
mockResponse.Setup(x=> x.Cookies).Returns(new HttpCookieCollection());
var homeController = new HomeController();
var requestContext = new RequestContext(mockContext.Object, new RouteData());
homeController.ControllerContext = new ControllerContext(requestContext, homeController);
// Act
ViewResult viewResult = homeController.HomePage();
// Assert
Assert.AreEqual(String.Empty, viewResult.ViewName);
Assert.IsTrue((bool)viewResult.ViewData["IsFirstVisit"]);
Assert.AreEqual(1, homeController.Response.Cookies.Count);
Assert.AreEqual(bool.TrueString, homeController.Response.Cookies["HasVisitedBefore"].Value);
}
Мой проект ссылается на библиотеки System.Web и System.Web.Abstractions.
Когда файл кода только «использует System.Web», я получаю две ошибки:
- (строка 25 под словом «Assert») Тип «System.Web.HttpResponseBase» определен в сборке, на которую нет ссылок. Необходимо добавить ссылку на сборку «System.Web.Abstractions, версия = 3.5.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35».
- (строки 25 и 26 под словом «Cookies») «System.Web.HttpResponseBase» не содержит определения «Cookies», а метод расширения «Cookies» не принимает первый аргумент типа «System.Web.HttpResponseBase 'может быть найдено (вам не хватает директивы using или ссылки на сборку?)
Если я добавлю «using System.Web.Abstractions» в файл кода и соберу проект, вышеуказанные ошибки исчезнут, но затем я получу следующую ошибку:
- Тип или имя пространства имен 'Abstractions' не существует в пространстве имен 'System.Web' (вам не хватает ссылки на сборку?)
Интересно, что в обоих случаях, когда я ставлю точку после Response, Intellisense предлагает мне правильный выбор (т. Е. Response.Cookies). Похоже, что Intellisense имеет информацию о HttpResponseBase, чего нет у движка сборки.
Есть идеи, что может быть причиной этого?