我正在使用BDD/TDD技术开发一个项目,并尽最大努力坚持到底。我刚刚遇到的一个问题是对DefaultModelBinder进行单元测试。我正在使用mspec编写我的测试。
我有一个这样的类,我想要绑定到:
public class EmailMessageInput : IMessageInput
{
public object Recipient
{
get; set;
}
public string Body
{
get; set;
}
}下面是我如何构建我的规范上下文。我正在构建一个假的表单集合,并将其填充到一个bindingContext对象中。
public abstract class given_a_controller_with_valid_email_input :
given_a_controller_context
{
Establish additional_context = () =>
{
var form = new FormCollection
{
new NameValueCollection
{
{ "EmailMessageInput.Recipient", "test@test.com"},
{ "EmailMessageInput.Body", "Test body." }
}
};
_bindingContext = new ModelBindingContext
{
ModelName = "EmailMessageInput",
ValueProvider = form
};
_modelBinder = new DefaultModelBinder();
};
protected static ModelBindingContext _bindingContext;
protected static DefaultModelBinder _modelBinder;
}
public abstract class given_a_controller_context
{
protected static MessageController _controller;
Establish context =
() =>
{
_controller = new MessageController();
};
}最后,当我从我的一个规范中执行.BindModel()时,我的规范抛出一个空引用异常:
Because of = () =>
{
_model = _modelBinder.BindModel(null, _bindingContext);
};有线索可能是什么吗?
如果需要,请随时向我询问更多信息。我可能认为某些事情是理所当然的。
发布于 2010-05-16 19:15:49
恐怕我必须从一个问题开始:为什么要测试默认的模型绑定器?DefaultModelBinder类是框架的一部分,因此测试不是您的责任。您应该假设它是一个正常工作的黑盒。
无论如何,看看你的代码,我认为你想要完成的是让一个绑定的模型进一步测试;我是在正确的轨道上吗?如果是这样的话,我建议您研究一下James Broome's MSpec extensions for MVC
源代码附带了几个示例;但它允许您,例如,调用控制器上的操作方法,并对(类型!)ViewModel (从控制器操作传递给视图的对象),只需执行以下操作
It should_display_the_person_name = () => result.Model<Person>().Name.ShouldNotBeNull();希望这能有所帮助
https://stackoverflow.com/questions/2706648
复制相似问题