route parameter net mvc attribute asp c# asp.net-mvc moq

c# - parameter - Simulacros de la clase RouteData en System.Web.Routing para aplicaciones MVC



route web api core (2)

RouteData también tiene un constructor que no toma argumentos . Simplemente crea uno y agrega los valores que quieras. No hay necesidad de burlarse cuando puedes crear uno.

var routeData = new RouteData(); routeData.Values.Add( "key1", "value1" ); var controllerContext = new ControllerContext(httpContextMock.Object, routeData, controllerMock.Object);

Estoy intentando probar alguna lógica de aplicación que depende de la propiedad Valores en ControllerContext.RouteData.

Hasta ahora tengo

// 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);

La prueba de la unidad falla con: System.ArgumentException: configuración no válida en un miembro no anulable: r => r.Values

Crear un RouteData falso tampoco funciona, ya que el constructor es RouteData (RouteBase, IRouteHandler).

La clase importante aquí es la clase abstracta RouteBase que tiene el método GetRouteData (HttpContextBase) que devuelve una instancia de RouteData, la clase que estoy intentando falsificar. ¡Llevándome en círculos!

Cualquier ayuda en esto sería muy bienvenida.


Soy muy nuevo en TDD junto con los objetos simulados, pero una lección que aprendí de un colega no fue simular los tipos que usted no posee. Por lo tanto, no intentes burlarte de RouteData. La idea fue originalmente concebida por Joe Walnes (aunque no puedo encontrar dónde lo dijo).