0

当我使用 eric lipton 提供的这个应用程序从 Steve Sanderson 的 Pro ASP.NET MVC 框架(从 asp.net 1.0 到 mvc 2 beta)迁移示例 SportsStore 应用程序时,一切正常 - 除了 2 个单元测试。
两者的错误消息是:
Tests.CartControllerTests.VeryLongTestMethodName:
System.ArgumentNullException: value can't be undefined。
参数名称:context

我怀疑这是因为版本 2 中的默认模型绑定器支持 DataAnnotations,因为来自 NUnit 的堆栈调用跟踪告诉我 DefaultModelBinder 中的一些问题。有什么想法可以解决吗?
编辑
尝试使用起订量来解决问题,但没有奏效。这是代码:

var request = new Moq.Mock<HttpRequestBase>();
request.Setup(r => r.HttpMethod).Returns("POST");
var mockHttpContext = new Moq.Mock<HttpContextBase>();
mockHttpContext.Setup(c => c.Request).Returns(request.Object);
controllerContext = new ControllerContext(mockHttpContext.Object, new RouteData(),
                            new Moq.Mock<ControllerBase>().Object);

我正在测试的方法只提交 POST。可以将“POST”放到我的测试中吗?

4

3 回答 3

2

要让它在 ASP.NET MVC 2 中工作,您必须创建一个虚拟 ControllerContext 并将其设置在您的控制器上的单元测试的初始化(或“设置”或“排列”)部分。

下面是一个如何在 Moq 库的帮助下创建虚拟 ControllerContext 的示例:How to mock the controller context with moq

于 2009-12-01T21:13:11.540 回答
1

怀疑这可能是转换器中的遗漏。如果这是一个(示例)应用程序,那么您不能简单地在 2.0 中打开应用程序而忘记转换吗?

如果您正在尝试学习 2.0,那么这可能不是最好的前进方式。

如果您正在测试转换器是否工作,那么可以在实际应用程序而不是示例应用程序上进行尝试。

您是否考虑过在转换器网站上留下评论,因为那里留下的任何评论都是针对转换器的?

您是否真的尝试过逐行浏览代码,看看是否有任何明显的地方。

无论如何,这些都是我要尝试的事情。

于 2009-12-01T20:48:25.047 回答
0

我相信这在 ASP.NET MVC 2.0 版本中仍然是一个问题。FormCollection 对象存在问题,与 UpdateModel 一起使用时,TryUpdateModel 会引发异常。请参阅UpdateModel 的 ASP.NET MVC 2 问题

我最近尝试升级我的项目,但决定暂时坚持使用 MVC 1.0,直到 RTM(这意味着有一个修复)。

于 2010-01-28T02:23:14.900 回答