Pregunta Burlarse de HttpActionContext.ActionArguments al probar Web.Api ActionFilter


Estoy escribiendo un filtro de acción OnActionExecuting y quiero probar la funcionalidad de la unidad.

Una de las cosas que debe hacer el filtro es realizar una validación de los argumentos de acción pasados ​​al filtro.

Estoy recibiendo los argumentos de la actionContext.ActionArguments Diccionario que está funcionando bien para la implementación, pero tengo dificultades para lograr que la unidad lo pruebe.

En mi prueba no puedo configurar actionContext.ActionArguments Como no tiene setter ni puedo burlarme de él, ya que no es virtual.

¿Esto me dejó en un pequeño dilema sobre si puedo obtener algún valor de las pruebas unitarias en este escenario?


5
2018-06-21 07:42


origen


Respuestas:


De acuerdo con el código fuente AspNetWebStack, actionContext.ActionArguments es simplemente un diccionario. Por lo tanto, es bastante trivial insertar un par de valores clave en él. Simplemente haría algo como

actionContext.ActionArguments [key] = value;

en la parte de arreglos de la prueba unitaria.

Espero que ayude


9
2017-10-03 01:44



Ver mi blog para esto: https://dondeetan.com/2016/09/19/validating-and-unit-testing-web-api-2-route-attribute-parameters/

 var mockactioncontext = new HttpActionContext
            {
                ControllerContext = new HttpControllerContext
                {
                    Request = new HttpRequestMessage()
                },
                ActionArguments = { { "employeeid", "null" } }
            };

            mockactioncontext.ControllerContext.Configuration = new HttpConfiguration();
            mockactioncontext.ControllerContext.Configuration.Formatters.Add(new JsonMediaTypeFormatter());

            var filter = new <youractionattributefilterclass>();
            filter.OnActionExecuting(mockactioncontext);
            Assert.IsTrue(mockactioncontext.Response.StatusCode == HttpStatusCode.BadRequest);

4
2017-09-20 21:22