Visual Studio 2010 wydaje się mieszać wyżej wymienione biblioteki.Dlaczego program Visual Studio 2010 miesza się z System.Web i System.Web.Abstractions?
Ten przykładowy kod pochodzi z książki "Pro ASP.NET MVC2 Framework" autorstwa Stevena Sandersona.
[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);
}
Mój projekt odwołuje się do bibliotek System.Web i System.Web.Abstractions.
Gdy plik kod jest tylko „za pomocą System.Web” Mam dwa błędy:
- (linia 25 pod słowem „Assert”) typu „System.Web.HttpResponseBase” jest zdefiniowane w sposób montaż, do którego nie odwołuje się. Należy dodać odniesienie do zestawu "System.Web.Abstractions, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 '.
- (Linie 25 i 26 pod nazwą "Cookies") "System.Web.HttpResponseBase" nie zawiera definicji "plików cookie" ani metody rozszerzającej "Pliki cookie" akceptujących pierwszy argument typu "System.Web.HttpResponseBase 'można odnaleźć (czy brakuje using dyrektywa lub odwołania do zestawu?)
Jeśli dodać «używając System.Web.Abstractions» do pliku z kodem i zbudować projekt, powyższe błędy odejść, ale potem następnie pojawia się następujący błąd:
- Nazwa typu lub obszaru nazw "Abstrakcje" nie istnieje w przestrzeni nazw "System.Web" (czy brakuje zespołu odniesienie?)
Co ciekawe, w obu przypadkach, gdy umieszczam kropkę po odpowiedzi, Intellisense monituje mnie o prawidłowe wybory (tj. Response.Cookies). Wygląda na to, że Intellisense ma informacje o HttpResponseBase, których nie ma w silniku kompilacji.
Każdy pomysł, co może być przyczyną tego?
To było pominięte odniesienie. Szukałem odniesienia do System.Web.Abstractions w moim projekcie WebUI, a nie w projekcie UnitTests. Dzięki. Zachowanie jest nadal dość dziwne. – Jason
Słodki. Dzięki ! –