我正在编写一个自定义模型绑定器(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)
答案 0 :(得分:1)
有两种方法:
A)创建IValueProvider的模拟,该模拟具有测试是否全部消耗的逻辑。
B)接受多个断言,但将它们提取到一个方法中,以保持单元测试简短,易读。
我会选择B)因为简单 - 除非我期望涉及IValueProvider的类似测试。我会将断言方法称为AssertThatAllValuesAreConsumed(testBindingContext)
。
此致 的Morten