0

Я пишу блок-тест для настраиваемого связующего (MVC 3) и хочу подтвердить все значения, которые я прошел через мой ValueProvider. потребляемого связующим (это означает, что связующее их прочитало и привязало к объекту модели). (Я также хочу тест, чтобы подтвердить, что ValueProvider с дополнительными значениями не потребляются)Как проверить все значения в ModelBindingContext.ValueProvider были потреблены с помощью настраиваемого связующего объекта.

Вот (рабочий) код для моего теста:

<Test()> _ 
    Public Sub Should_Bind_Example_Payment_Method_To_Model() 
     'arrange 
     Dim testBindingContext As New ModelBindingContext() With { 
      .ModelName = "MyModel", 
      .ValueProvider = New NameValueCollectionValueProvider(
       New NameValueCollection() From { 
        {"Param1", "val1"}, 
        {"Param2", "val2"}, 
       }, Nothing), 
      .ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(Nothing, GetType(MyModelType)) 
     } 

     dim testControllerContext as new ControllerContext() 
     Dim modelBinder As New MyCustomModelBinder() 

     'act 
     Dim generatedModel As MyModelType = modelBinder.BindModel(testControllerContext, testBindingContext) 

     'assert 
     Assert.AreEqual("val1", generatedModel.Param1) 
     Assert.AreEqual("val2", generatedPaymentMethod.Param2) 

     Assert.IsTrue(testBindingContext.ModelState.IsValid) 
    End Sub 

Я хочу, чтобы добавить строку, как это (это очевидно неверный код)

Assert.IsTrue(testBindingContext.ValueProvider.AllValuesConsumed) 

ответ

1

есть два способа:

A) Создать макет из IValueProvider, который имеет логику, чтобы проверить, если вы потребляете все.

B) Примите множество утверждений, но извлеките их в метод, чтобы держать unittest коротким, простым и удобочитаемым.

Я бы выбрал B) из-за простоты - если бы я не ожидал подобных тестов с участием IValueProvider. Я бы назвал метод утверждения чем-то вроде AssertThatAllValuesAreConsumed(testBindingContext).

С уважением, Morten

+0

Я не против нескольких утверждений, но то, что мне нужно сделать, чтобы утверждать? –

+0

Я не думаю, что здесь есть волшебный буллит. Вам нужно знать, как связующее должно потреблять, и утверждать эти ожидания. Альтернативой является макет объекта, который может определить, были ли прочитаны все значения. – Morten

+0

Это точно вопрос. Существуют ли какие-либо предположения, которые ModelValueProvider следует за потребляющими значениями, или мне нужно, чтобы это было с помощью макета. –