在使用MVC 2 RC之前,我使用的是MVC 1,我用来更新控制器中的对象的代码是:
TryUpdateModel(entity, null, null, new[] { "Name", "Controller" });
我能够在我的测试中单独测试这个控制器动作:
controller.ValueProvider = myFormCollection.ToValueProvider();
将我的代码迁移到MVC 2后,这不再有效。它在FormCollection中的GetValue方法实现中保持失败,因为它验证您要求它的值不为null或为空。问题是这段代码在运行时工作,但不在我的单元测试中。我没有使用前缀,所以我发送NULL作为前缀值。
我查看了MVC 2 RC源代码,控制器的ValueProvider查找的第一个值是前缀,所以它失败了。我必须将哪个提供程序分配给controller.ValueProvider,以便它可以在我的单元测试中工作?
编辑:非常简短地问一下,如何告诉TryUpdateModel不要在我的单元测试中使用前缀,这样它就不会抛出异常?
谢谢!
答案 0 :(得分:2)
MVC 2 RC中的已知错误将在下一次丢弃时修复。
关于此问题的单独电子邮件:
顺便说一下,在单元测试的同时 可能想用 SimpleValueProvider类型。 (有可能 发现在MVC单元测试项目中,所以 你可以将它复制到你自己的项目中 你想要的。)它实际上只是一个 字典也 实现IValueProvider。这个会 如果你想存储更有用 价值如{“foo”,42}而不是 {“foo”,“42”}用于单元测试。