首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试DefaultModelBinder时的NullReferenceException

测试DefaultModelBinder时的NullReferenceException
EN

Stack Overflow用户
提问于 2010-04-25 08:04:30
回答 1查看 355关注 0票数 0

我正在使用BDD/TDD技术开发一个项目,并尽最大努力坚持到底。我刚刚遇到的一个问题是对DefaultModelBinder进行单元测试。我正在使用mspec编写我的测试。

我有一个这样的类,我想要绑定到:

代码语言:javascript
复制
public class EmailMessageInput : IMessageInput
    {
        public object Recipient
        {
            get; set;
        }

        public string Body
        {
            get; set;
        }

    }

下面是我如何构建我的规范上下文。我正在构建一个假的表单集合,并将其填充到一个bindingContext对象中。

代码语言:javascript
复制
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()时,我的规范抛出一个空引用异常:

代码语言:javascript
复制
Because of = () => 
                 {
                     _model = _modelBinder.BindModel(null, _bindingContext);
                 };

有线索可能是什么吗?

如果需要,请随时向我询问更多信息。我可能认为某些事情是理所当然的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-16 19:15:49

恐怕我必须从一个问题开始:为什么要测试默认的模型绑定器?DefaultModelBinder类是框架的一部分,因此测试不是您的责任。您应该假设它是一个正常工作的黑盒。

无论如何,看看你的代码,我认为你想要完成的是让一个绑定的模型进一步测试;我是在正确的轨道上吗?如果是这样的话,我建议您研究一下James Broome's MSpec extensions for MVC

源代码附带了几个示例;但它允许您,例如,调用控制器上的操作方法,并对(类型!)ViewModel (从控制器操作传递给视图的对象),只需执行以下操作

代码语言:javascript
复制
It should_display_the_person_name = () => result.Model<Person>().Name.ShouldNotBeNull();

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2706648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档