Ich habe eine ASP.NET MVC 3-Webanwendung, die Jonathan McCrackens Test-Drive Asp.NET MVC folgt (tolles Buch, übrigens) und ich bin auf ein Problem gestoßen. Beachten Sie, dass ich MVCContrib, Rhino und NUnit verwende.Versucht, geschützten Speicher zu lesen oder zu schreiben
[Test]
public void ShouldSetLoggedInUserToViewBag() {
var todoController = new TodoController();
var builder = new TestControllerBuilder();
builder.InitializeController(todoController);
builder.HttpContext.User = new GenericPrincipal(new GenericIdentity("John Doe"), null);
Assert.That(todoController.Index().AssertViewRendered().ViewData["UserName"], Is.EqualTo("John Doe"));
}
Der obige Code immer wirft diesen Fehler:
System.AccessViolationException : Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Der Controller Aktionscode ist die folgende:
[HttpGet]
public ActionResult Index() {
ViewData.Model = Todo.ThingsToBeDone;
ViewBag.UserName = HttpContext.User.Identity.Name;
return View();
}
Von dem, was ich herausgefunden haben, die App, weil zum Absturz zu bringen scheint, der beiden Aufgaben in der Controller-Aktion. Allerdings kann ich nicht sehen, wie es falsch ist !?
Kann mir jemand helfen, die Lösung für dieses Problem zu finden.
Vielen Dank.
Edit 1
Ich habe einige Experimente durchgeführt, um zu sehen, was das Problem ist. Beim Entfernen der ViewData,Model
Zuweisung überschreitet das Problem Expected result to be of type ViewResult. It is actually of type ViewResult.
. Die ViewData
Zuordnung ist so grundlegend, dass ich glaube nicht, dass es das Problem ist, also denke ich, dass etwas mit Rhino oder MVCcontrib in Verbindung mit MVC 3 nicht stimmt.
Ich habe auch den folgenden Test früher für den gleichen Controller geschrieben Aktion:
[Test]
public void ShouldDisplayAListOfTodoItems() {
Assert.That(((ViewResult)new TodoController().Index()).ViewData.Model, Is.EqualTo(Todo.ThingsToBeDone));
}
dieser scheitert nun mit System.NullReferenceException : Object reference not set to an instance of an object
becuase wahrscheinlich gibt es keine Httpcontext für diesen speziellen Test einrichten. Wenn Sie die ViewBag
Zuweisung entfernen, ist alles in Ordnung.
Hoffnung, die das Problem klarer macht.
bearbeiten 2
Wenn Sie den Code debuggen, nachdem die ViewData.Model
Zuordnung zu entfernen, wirft es einen anderen Fehler: System.NullReferenceException : Object reference not set to an instance of an object.
auf der ViewBag
Zuordnung.
Auf welcher Zeile genau wird die Ausnahme ausgelöst und können Sie die vollständige Stack-Trace buchen? –
Nun, es stirbt, wenn ich versuche, den ViewData etwas zuzuweisen. Also, wenn ich die zwei Zeilen kommentiere, wo ich ViewData und ViewBag Sachen gebe, stirbt es nicht. – Interfector