Tôi có một vật cố đơn vị kiểm tra, trong đó tôi đang cố gắng để thử nghiệm một ControllerAction trên một bộ điều khiển ASP.NET MVC mà được sử dụng cho các chức năng thành viên trên một ứng dụng web. Tôi đang cố gắng để thử HttpContext cho các bài kiểm tra. ControllerAction trong thử nghiệm thực sự đặt các thuộc tính trên HttpContext, chẳng hạn như các giá trị Session, các giá trị Response.Cookies, vv. Đây không phải là tất cả các mã, nhưng đây là một mẫu thô của thử nghiệm mà tôi đang cố gắng chạy :Mocking HttpContextBase với Moq
[Test]
public void ValidRegistrationDataSuccessfullyCreatesAndRegistersUser()
{
var context = new Mock<HttpContextBase>() {DefaultValue = DefaultValue.Mock};
context.SetupAllProperties();
var provider = new Mock<MembershipProvider>(new object[] {context.Object});
var controller = new AccountController(context.Object, provider.Object);
// This just sets up a local FormCollection object with valid user data
// in it to use to attempt the registration
InitializeValidFormData();
ActionResult result = controller.Register(_registrationData);
Assert.IsInstanceOfType(typeof(ViewResult), result);
// Here is where I'd like to attempt to do Assertions against properties
// of the HttpContext, like ensuring that a Session object called "User"
// exists, and new auth cookie exists on the Response.Cookies collection.
// So far I've been unable to successfully check the values of those properties.
// I've been unsuccessful in getting those properties setup correctly on my
// mock object so that my ControllerAction can actually *set* their values,
// and that I can make assertions on them afterwards. The above code actually
// generates a StackOverflowException (which I've reported) on the
// context.SetupAllProperties() call. What am I doing wrong, or what do I need
// to do to be able to set and assert on those context properties?
}
Không chắc gì tôi đang làm sai, nhưng tôi rất muốn nó nếu ai đó có thể chỉ cho tôi đi đúng hướng và chỉ cho tôi làm thế nào để thiết lập đối tượng HttpContextBase giả này như vậy mà điều khiển của tôi thực sự có thể thiết lập các giá trị về các thuộc tính của nó và tôi có thể xác nhận các thuộc tính đó để đảm bảo rằng ControllerAction của tôi đang làm những gì tôi cần.
Tôi có đang tiếp cận cách này sai không? Tôi biết rằng bộ điều khiển MVC có một ControllerContext mà tôi có thể sử dụng để thiết lập các giá trị cho Session, vv, nhưng tôi không thể tìm ra cách mà một cái gì đó như thế có thể được chế nhạo mà không cần tiêm nó. Có cách nào để làm điều đó thay thế không? (Tôi cũng cần để có thể vượt qua bối cảnh trong thành viên của tôi MembershipProvider quá) Đó có phải là một cách tiếp cận tốt hơn?
Cảm ơn.
Tôi có anh cuốn sách, nhưng chỉ có nó một vài ngày trước, vì vậy tôi đoán tôi đã không nhận được để phần đó được nêu ra. Nếu bạn có thể đưa tôi đến phần trong cuốn sách đó, nơi bạn lấy mã mẫu từ đó, điều đó thật tuyệt vời. Cảm ơn rất nhiều. –
Kiểm tra kết thúc của ch.9. Tôi không có nó trước mặt tôi, nhưng điều đó có vẻ là nó liếc nhìn vào bảng nội dung của cuốn sách trên amazon. –
Tìm thấy nó. Đó là * chính xác * những gì tôi cần. Giờ thì tất cả đều hoạt động. Cám ơn rất nhiều. –