カスタム モデル バインダー (MVC 3) の単体テストを書いていて、ValueProvider を介して渡したすべての値がバインダーによって消費されることを確認したい (つまり、バインダーが値を読み取ってモデル オブジェクトにバインドしたことを意味します)。(追加の値を持つ 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)