2015-02-26 6 views
6

Я выполняю единичный тест моего маршрута PostMyModel. Однако в пределах PostMyModel() я использовал линию Validate<MyModel>(model) для повторной проверки моей модели после ее изменения. Я использую тестовый контекст, чтобы не быть зависимым от db для модульных тестов. Я отправил контекст испытания и метод пост ниже:Подтверждение сбоя в модульных тестах

Test Контекстное

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() { } 

    } 

Сообщение Метод

[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); 
     } 

При запуске Validate<MyModel>(model) линии, я получаю ошибку:

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

Как я могу это исправить?

ответ

15

Для того, чтобы команда Validate запускалась, должен быть установленный HMPRequest, связанный с контроллером. Код для этого ниже. Это будет высмеивать HttpRequest по умолчанию, который в этом случае довольно не используется, что позволяет тестировать модуль.

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

Может быть проще с: controller.Request = новый HttpRequestMessage(); controller.Request.Properties ["MS_HttpConfiguration"] = new HttpConfiguration(); – ccook

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