2013-02-25 16 views
10

Sono nuovo di mvc4 e anche TDD.MVC4 TDD - System.ArgumentNullException: il valore non può essere nullo.

Quando provo a eseguire questo test fallisce, e non ho idea del perché. Ho provato così tante cose che sto iniziando a girare in tondo.

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

    } 

E i risultati:

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

Usa 'Passo sopra' nel vostro debugger e inserire il metodo, qualcosa deve essere' null' – LukeHennerley

+0

Su un lato nota, unit test non dovrebbero mai accedere nessuno statica risorse come db's. Dovresti iniettare queste dipendenze. Cosa succede quando il tuo db cambia? il tuo test di unità è inutile! – Liam

+0

Direi che db è null o db.Users è nullo. utilizzare il debugger per verificare –

risposta

20

Si prova sta fallendo perché la proprietà Request che si sta utilizzando nel vostro ApiController non è inizializzata. Assicurarsi che si inizializza che se avete intenzione di usarlo:

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

Ha funzionato come un incantesimo, grazie! – ArniReynir

Problemi correlati