2013-02-25 2 views
10

Я новичок в mvc4, а также TDD.MVC4 TDD - System.ArgumentNullException: значение не может быть нулевым.

Когда я пытаюсь запустить этот тест, он терпит неудачу, и я понятия не имею, почему. Я пробовал так много вещей, которые я начинаю кругами.

// 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); 

    } 

И результаты:

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

Использование 'Шаг over' в отладчики и ввести метод, то должно быть' null' – LukeHennerley

+0

На стороне записки, юнит-тесты не должны обращаться ни статическую таких ресурсов, как db's. Вы должны вводить эти зависимости. Что происходит, когда изменяется ваш дБ? ваш юнит-тест бесполезен! – Liam

+0

Я бы предположил, что db имеет значение null или db.Users равно null. используйте отладчик для проверки –

ответ

20

Вы тест неудовлетворительные, потому что Request свойство, которое вы используете в вашем ApiController не инициализируется. Убедитесь, что вы инициализировать его, если вы собираетесь использовать:

//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

Работаю как очарование, спасибо! – ArniReynir

Смежные вопросы