2016-08-12 16 views
6

Tworzę test jednostki za pomocą nunit i cały ten kod działa poprawnie w czasie wykonywania.Wartość nie może być pusta. Nazwa parametru: request

Mam poniższy chroniony kod HttpResponseMessage, który jest wywoływany przez kontroler po jego powrocie.

jednak błąd:

"Value cannot be null. Parameter name: request" is displaying.

I kiedy sprawdzić wniosek, to jest rzeczywiście null.

Pytanie: Jak mogę zakodować test urządzenia, aby zwrócić HttpResponseMessage?

Błąd jest pokazany w tym wierszu:

protected HttpResponseMessage Created<T>(T result) => Request.CreateResponse(HttpStatusCode.Created, Envelope.Ok(result)); 

Oto moja Kontroler:

[Route("employees")] 
    [HttpPost] 
    public HttpResponseMessage CreateEmployee([FromBody] CreateEmployeeModel model) 
    { 
     //**Some code here**// 

     return Created(new EmployeeModel 
     { 
      EmployeeId = employee.Id, 
      CustomerId = employee.CustomerId, 
      UserId = employee.UserId, 
      FirstName = employee.User.FirstName, 
      LastName = employee.User.LastName, 
      Email = employee.User.Email, 

      MobileNumber = employee.MobileNumber, 
      IsPrimaryContact = employee.IsPrimaryContact, 
      OnlineRoleId = RoleManager.GetOnlineRole(employee.CustomerId, employee.UserId).Id, 
      HasMultipleCompanies = EmployeeManager.HasMultipleCompanies(employee.UserId) 
     }); 
    } 

Odpowiedz

1

myślę, co się dzieje, jest to, że nie są instancji lub przypisanie aĹ życzenie (HttpRequestMessage) kiedy nowy kontroler. Uważam, że obowiązkowe jest określenie wniosku przed wywołaniem w metodzie Api za pomocą testu jednostki.

może również wymagać konfiguracji (HttpConfiguration):

sut = new YourController() 
    { 
     Request = new HttpRequestMessage { 
      RequestUri = new Uri("http://www.unittests.com") }, 

     Configuration = new HttpConfiguration() 
    }; 

Daj mi znać, czy działa.

+0

Ten pracował dla mnie: kontroler MyController = new MyController() {request = new System.Net.Http.HttpRequestMessage() }; –

7

Powodem otrzymujesz:

An exception of type 'System.ArgumentNullException' occurred in System.Web.Http.dll but was not handled in user code Additional information: Value cannot be null.

dlatego, że obiekt Request jest null.

enter image description here

Rozwiązaniem, które jest tworzenie instancji kontrolera w badaniach takich jak:

var myApiController = new MyApiController 
    { 
     Request = new System.Net.Http.HttpRequestMessage(), 
     Configuration = new HttpConfiguration() 
    }; 

W ten sposób, podczas tworzenia nowej instancji klasy MyApiController jesteśmy inicjalizacji obiekt Request. Ponadto konieczne jest również zapewnienie powiązanego obiektu konfiguracyjnego.

Wreszcie przykład jednostka testowa dla Api kontrolera mogą być:

[TestClass] 
public class MyApiControllerTests 
{ 
    [TestMethod] 
    public void CreateEmployee_Returns_HttpStatusCode_Created() 
    { 
     // Arrange 
     var controller = new MyApiController 
     { 
      Request = new System.Net.Http.HttpRequestMessage(), 
      Configuration = new HttpConfiguration() 
     }; 

     var employee = new CreateEmployeeModel 
     { 
      Id = 1 
     }; 

     // Act 
     var response = controller.CreateEmployee(employee); 

     // Assert 
     Assert.AreEqual(response.StatusCode, HttpStatusCode.Created); 
    } 
} 
Powiązane problemy