Visual Studio 2010 sembra mischiare le librerie sopra menzionate.Perché Visual Studio 2010 configura System.Web e System.Web.Abstractions?
Questo esempio di codice proviene dal libro "Pro ASP.NET MVC2 Framework" di Steven Sanderson.
[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);
}
Il mio progetto fa riferimento alle librerie System.Web e System.Web.Abstractions.
Quando il file di codice è solo "using System.Web" Ho due errori:
- (linea 25 sotto la parola 'Assert') Il tipo 'System.Web.HttpResponseBase' è definito in un assembly che non è referenziato. È necessario aggiungere un riferimento all'assembly 'System.Web.Abstractions, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'.
- (righe 25 e 26 sotto la parola "cookie") "System.Web.HttpResponseBase" non contiene una definizione per "cookie" e nessun metodo di estensione "cookie" che accetta un primo argomento di tipo "System.Web.HttpResponseBase" 'potrebbe essere trovato (ti manca una direttiva using o un riferimento all'assembly?)
Se aggiungo "using System.Web.Abstractions" al file di codice e creo il progetto, gli errori precedenti vanno via ma poi quindi viene visualizzato il seguente errore:
- Il nome o lo spazio dei nomi 'Abstractions' non esiste nello spazio dei nomi 'System.Web' (manca un assembly riferimento?)
È interessante notare che in entrambi i casi quando inserisco un punto dopo Risposta, Intellisense mi suggerisce le scelte corrette (ad es. Response.Cookies). Sembra che Intellisense abbia informazioni su HttpResponseBase che il motore di generazione non ha.
Qualche idea di cosa potrebbe causare questo?
E 'stato un riferimento mancato. Stavo guardando il riferimento System.Web.Abstractions nel mio progetto WebUI piuttosto che il progetto UnitTests. Grazie. Il comportamento è ancora un po 'strano. – Jason
Dolce. Grazie ! –