2013-02-25 28 views
10

Tôi mới tham gia mvc4 và cả TDD.MVC4 TDD - System.ArgumentNullException: Giá trị không được rỗng.

Khi tôi thử chạy thử nghiệm này không thành công và tôi không biết tại sao. Tôi đã thử rất nhiều thứ tôi bắt đầu chạy vòng quanh.

// GET api/User/5 
    [HttpGet] 
    public HttpResponseMessage GetUserById (int id) 
    { 
     var user = db.Users.Find(id); 
     if (user == null) 
     { 
      //return Request.CreateResponse(HttpStatusCode.NotFound); 
      throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound)); 
     } 
     return Request.CreateResponse(HttpStatusCode.OK, user); 

    } 


    [TestMethod] 
    public void GetUserById() 
    { 
     //Arrange 
     UserController ctrl = new UserController(); 
     //Act 

     var result = ctrl.GetUserById(1337); 

     //Assert 
     Assert.IsNotNull(result); 
     Assert.AreEqual(HttpStatusCode.NotFound,result.StatusCode); 

    } 

Và kết quả:

Test method Project.Tests.Controllers.UserControllerTest.GetUserById threw exception: 
System.ArgumentNullException: Value cannot be null. Parameter name: request 
+0

Sử dụng 'Bước over' trong trình gỡ lỗi của bạn và nhập phương pháp, một cái gì đó phải được 'null' – LukeHennerley

+0

Trên một mặt lưu ý, kiểm tra đơn vị không bao giờ nên truy cập không tĩnh tài nguyên như của db. Bạn nên tiêm những phụ thuộc này. Điều gì sẽ xảy ra khi db của bạn thay đổi? kiểm tra đơn vị của bạn là vô dụng! – Liam

+0

Tôi đoán rằng db là null hoặc db.Users là null. sử dụng trình gỡ lỗi để kiểm tra –

Trả lời

20

Bạn kiểm tra là không vì Request tài sản mà bạn đang sử dụng bên trong ApiController của bạn không được khởi tạo. Hãy chắc chắn rằng bạn khởi tạo nó nếu bạn có ý định sử dụng nó:

//Arrange 
var config = new HttpConfiguration(); 
var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/api/user/1337"); 
var route = config.Routes.MapHttpRoute("Default", "api/{controller}/{id}"); 
var controller = new UserController 
{ 
    Request = request, 
}; 
controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config; 

//Act 
var result = controller.GetUserById(1337); 
+1

Làm việc như sự quyến rũ, cảm ơn bạn! – ArniReynir

Các vấn đề liên quan