2013-07-19 1 views
2

Я пытаюсь проверить привязку модели JSON в NancyFx.Единичное тестирование JSON ModelBinding в Nancy

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

var model = this.Bind<EventRequestModel>(); 

всегда имеет значение null;

Вот упрощенный пример того, что я делаю:

NancyModule:

Post["/Events"] = _ => 
    { 
     // Convert request to model and validate 
     try 
     { 
      var model = this.Bind<EventRequestModel>(); 
      var result = this.Validate(model); 
      if (!result.IsValid) 
       throw new Exception("Model was not valid"); 

      return HttpStatusCode.OK 
     } 
     catch (Exception ex) 
     { 
      _logger.LogError(ex); 
      return HttpStatusCode.BadRequest; 
     }      
    }; 

Unit Test:

[Fact] 
    public void ReturnOkOnGoodRequest() 
    { 
     // Create a valid model 
     var model = new EventRequestModel() 
      { 
       TopRightLat = 100, 
       TopRightLong = 100, 
       BottomLeftLat = 100, 
       BottomLeftLong = 100 
      }; 

     var response = _browser.Post("/API/Events", with => 
      { 
       with.JsonBody(model); 
      }); 

     Assert.Equal(HttpStatusCode.OK, response.StatusCode); 
    } 

Я также пытался писать JSON непосредственно в тело и что-то вроде этого:

var json = "{'TopRightLat' : 0, 'TopRightLong': 0, 'BottomLeftLat': 0, 'BottomLeftLong': 0}" 
    var response = _browser.Post("/API/Events", with => 
     { 
      with.Header("Content-Type", "application/json"); 
      with.Body(json); 
     }); 

Это тело JSON работает, когда я тестирую конечную точку вручную, но не в своем модульном тесте. Что я делаю не так?

ответ

4

Причина, по которой это не удалось, состояло в том, что я не добавлял зависимости привязки модели к ConfigurableBootstrapper при настройке теста.

Это (в тесте настройки) установил ее

_bootstrapper = new ConfigurableBootstrapper(with => 
{ 
    ... 
    with.Dependency<IFluentAdapterFactory>(_fluentValidationFatory); 
    with.Dependency<IModelValidatorFactory>(_modelValidatorFactory); 
    ... 
}