Visual Studio 2010似乎正在混合上述库。
此代码示例来自StevenSanderson的《Pro ASP.NET MVC2框架》一书。
[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库。
当代码文件只有“using system.web”时,我会得到两个错误:
-
(单词“assert”下的第25行)“system.web.httpResponseBase”类型是在未引用的程序集中定义的。必须添加对程序集“system.web.abstractions,version=3.5.0.0,culture=neutral,publickeytoken=31bf3856ad364e35”的引用。
-
(单词“cookies”下的第25行和第26行)“system.web.httpResponseBase”不包含“cookies”的定义,并且找不到接受“system.web.httpResponseBase”类型的第一个参数的扩展方法“cookies”(是否缺少using指令或程序集引用?)
如果我将“using system.web.abstractions”添加到代码文件并构建项目,则上述错误会消失,但随后会得到以下错误:
-
命名空间“system.web”中不存在类型或命名空间名称“abstractions”(是否缺少程序集引用?)
有趣的是,在两种情况下,当我在响应后放置一个点时,IntelliSense会提示我正确的选择(即response.cookies)。似乎IntelliSense有关于httpResponseBase的信息,而构建引擎没有。
知道是什么引起的吗?