2015-02-26 7 views
6

Przeprowadzam test jednostki mojej trasy PostMyModel. Jednak w ciągu PostMyModel() użyłem linii Validate<MyModel>(model), aby ponownie zweryfikować mój model po jego zmianie. Używam kontekstu testu, aby nie być zależnym od bazy danych dla testów jednostkowych. Pisałem kontekst badań i metody POST poniżej:Sprawdzanie poprawności kończy się niepowodzeniem w testach jednostkowych

test Context

class TestAppContext : APIContextInterface 
    { 

     public DbSet<MyModel> MyModel { get; set; } 

     public TestAppContext() 
     { 
      this.MyModels = new TestMyModelDbSet(); 
     } 

     public int SaveChanges(){ 
      return 0; 
     } 
     public void MarkAsModified(Object item) { 

     } 

     public void Dispose() { } 

    } 

metody POST

[Route(""), ResponseType(typeof(MyModel))] 
     public IHttpActionResult PostMyModel(MyModel model) 
     { 
      //Save model in DB 
      model.status = "Waiting"; 
      ModelState.Clear(); 
      Validate<MyModel>(model); 

      if (!ModelState.IsValid) 
      { 
       return BadRequest(ModelState); 
      } 

      db.MyModels.Add(model); 

      try 
      { 
       db.SaveChanges(); 
      } 
      catch (DbUpdateException) 
      { 
       if (MyModelExists(model.id)) 
       { 
        return Conflict(); 
       } 
       else 
       { 
        throw; 
       } 
      } 

      return CreatedAtRoute("DisplayMyModel", new { id = model.id }, model); 
     } 

Gdy linia Validate<MyModel>(model) działa, pojawia się błąd:

System.InvalidOperationException: ApiController.Configuration must not be null. 

Jak mogę to poprawić?

Odpowiedz

15

Aby polecenie Validate działało, musi być fałszywy HttpRequest powiązany z kontrolerem. Kod do zrobienia tego znajduje się poniżej. To będzie wyśmiewać domyślny HttpRequest, który jest dość nieużywany w tym przypadku, umożliwiając testowanie jednostki.

HttpConfiguration configuration = new HttpConfiguration(); 
      HttpRequestMessage request = new HttpRequestMessage(); 
      controller.Request = request; 
      controller.Request.Properties["MS_HttpConfiguration"] = configuration; 
+2

może być skomplikowany z: controller.Request = new HttpRequestMessage(); controller.Request.Properties ["MS_HttpConfiguration"] = new HttpConfiguration(); – ccook