c# – Mocking System.Web.Routing中的RouteData类用于MVC应用程序

我试图测试一些依赖于ControllerContext.RouteData中的Values属性的应用程序逻辑。

到目前为止我有

// Arrange
var httpContextMock = new Mock<HttpContextBase>(MockBehavior.Loose);
var controllerMock = new Mock<ControllerBase>(MockBehavior.Loose);
var routeDataMock = new Mock<RouteData>();

var wantedRouteValues = new Dictionary<string, string>();
wantedRouteValues.Add("key1", "value1");
var routeValues = new RouteValueDictionary(wantedRouteValues);

routeDataMock.SetupGet(r => r.Values).Returns(routeValues);  <=== Fails here

var controllerContext = new ControllerContext(httpContextMock.Object, routeDataMock.Object, controllerMock.Object);

单元测试失败,具有:
System.ArgumentException:在不可覆盖成员上的设置无效:
r => r.Values

创建一个伪造的RouteData不工作,因为构造函数是RouteData(RouteBase,IRouteHandler)。

这里的重要类是抽象类RouteBase,它有方法GetRouteData(HttpContextBase),它返回一个RouteData的实例,我试图假的类。带我在圈子!

任何帮助,这将是最欢迎的。

RouteData也有一个constructor that takes no arguments.只需创建一个,并添加到您想要的值。没有必要嘲笑它,当你可以创建一个。

 var routeData = new RouteData();
 routeData.Values.Add( "key1", "value1" );

 var controllerContext = new ControllerContext(httpContextMock.Object, routeData, controllerMock.Object);
翻译自:https://stackoverflow.com/questions/986183/mocking-the-routedata-class-in-system-web-routing-for-mvc-applications

转载注明原文:c# – Mocking System.Web.Routing中的RouteData类用于MVC应用程序