Json Unit Test

15 views
Skip to first unread message

Edgar Ramos

unread,
May 25, 2015, 11:39:02 AM5/25/15
to altnet-...@googlegroups.com
Gente un saludo, quiero testear el action get de este controller (Web Api)

    [Authorize]
    public class MenuController : ApiController
    {
        private readonly IMainMenu menu;

        public MenuController(IMainMenu menu)
        {
            this.menu = menu;
        }
        public Menu Get(string username)
        {
            return menu.Get(username);
        }
    }

pero no se si estoy bien al querer testear que si un cliente angular por ejemplo, llama a esta action quiero que retorne un json como el siguiente

{
      "name" : "WWC EC",
      "id" : 1,
      "icon": "icon-desktop",
      "Aplication":[
        {
          "name": "Mantenimiento", 
          "id": "1", 
          "Transaction": [
             {
               "name": "Airline",
               "id": "1", 
               "Option": [
                  {"name" : "New", "icon" : "icon-new black"},
                  {"name" : "Edit", "icon" : "icon-edit black"},
                  {"name" : "Save", "icon" : "icon-save black"},
                  {"name" : "Cancel", "icon" : "icon-cancel black"}
                ]
             }
          ]
        },
        {
          "name": "Proccess", 
          "id": "2", 
          "Transaction": [
            {
              "name": "Coordination",
              "id": "1", 
               "Option": [
                  {"name" : "New", "icon" : "icon-new black"},
                  {"name" : "Save", "icon" : "icon-save black"},
                  {"name" : "Cancel", "icon" : "icon-cancel black"}
                ]
            }
          ]
        }
      ]
    },


Esto funciona, si yo lo pruebo por ejemplo con postman, y especifico el header asi

Accept: application/json
Authorization: Bearer GrNe_tC4X2bv45ogpTILi.......
Content-Type: application/json

Este me retorna el json deseado

Mi objetivo es testear esta action, pero no se cual seria el camino adecuado

Gracias por sus comentarios





--
Saludos
Edgar

Angel Java Lopez

unread,
May 25, 2015, 11:44:07 AM5/25/15
to altnet-...@googlegroups.com
Hola gente!

Hmmm... Edgar, test sin usar TDD? jajaja el camino del infierno jajaja ;-)

Bueno, yo lo que hago, es testear el metodo del controller, como si fuera un objeto mas. Ni me preocupo del Authorize ni nada. Luego habra algun test mas completo que haga eso.

Pero en mi test:

- Crearia el controller, dandole todo lo que se necesita
- Probaria llamar al metodo que tengo que probar
- Y haria asserts sobre lo que devolvio

Y asi, primero lo simple. Simplicity pays

Nos leemos!

Angel "Java" Lopez
@ajlopez


--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a altnet-hispan...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/altnet-hispano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Edgar Ramos

unread,
May 25, 2015, 11:54:44 AM5/25/15
to altnet-...@googlegroups.com
gracias angel sabia que me iban a matar por no hacer tdd jaja, pero bueno el siguiente va por ahi, el test este momento lo tengo tal cual lo describes, y en cuanto a lo q te refieres como test completo seria talvez un end to end?

Muchas gracias
--
Saludos
Edgar

Leonardo Micheloni

unread,
May 25, 2015, 1:08:41 PM5/25/15
to altnet-...@googlegroups.com
Si ese es tu código real me pregunto qué es lo que querés probar, es decir, si el servicio funciona o si webapi serializa bien, o la integración.

De: Edgar Ramos
Enviado el: ‎25/‎05/‎2015 12:54
Para: altnet-...@googlegroups.com
Asunto: Re: [altnet-hispano] Json Unit Test

Edgar Ramos

unread,
May 25, 2015, 1:15:13 PM5/25/15
to altnet-...@googlegroups.com
Leonardo, son correctas tus apreciaciones

en realidad me gustaria por el momento testeat

que el servicio funciona y que webapi serializa bien

Muchas gracias

Vicenç Garcia

unread,
May 25, 2015, 5:01:55 PM5/25/15
to altnet-...@googlegroups.com
Hola Edgar,

suele haber una regla en el testeo unitario que dice que no tienes que testear clases que no son tuyas.

Si utilizas una arquitectura de ports and adapters ( o hexagonal tambien le llaman) mucha gente dice que no es necesario testear los adapters, que en tu caso seria el controlador (https://robdmoore.id.au/blog/2015/01/26/review-of-ian-cooper-tdd-where-did-it-all-go-wrong/).

En caso que lo quiereas testear (que siempre esta bien) yo lo veo mas como un test de integracion, o en caso de utilizar TDD con outside-in esto formaria parte de tu test de aceptacion, aunque tu test de aceptacion tb podria tirar directamente contra el port.

Un saludo,
Vicenç

Juan María Hernández

unread,
May 26, 2015, 3:13:50 AM5/26/15
to altnet-...@googlegroups.com
Hola Edgar,

En realidad, con respecto al código que tienes en el controller sólo puedes testar dos cosas:

1) Que la información se obtiene de IMainMenu.
2) Que el formato del Json en el adecuado.

El primer punto podría considerarse un detalle de implementación (mañana podrías cambiar el IMainMenu por un MenuProvider, o un QueryObject o cualquier cosa) pero en cualquier caso, no sé si merece la pena testear una línea de código que lo único que hace es redirigir la llamada a otro objeto. Para *mi* ese test aporta poco valor.

El segundo, a menos que estés haciendo un API pública, creo que es mejor testearlo con un test de extremo a extremo desde tu cliente. A fin de cuentas, ¿de qué te vale asegurar que el JSON que generas tiene un formato u otro si ese formato no está sincronizado con el cliente?

Si hubiese algo de lógica para generar el JSON (agregar información, aplicar permisos, etc.) tendría más sentido testearlo, aunque seguramente en lugar de testear el JSON tal cual, sería mejor testear un modelo en memoria del JSON (tu objeto Menu) y asumir que el serializador funciona. Supongo que en cierto modo esa lógica es la que está encapsulada en IMainMenu.

Si aun así quieres testear el formato del JSON generado sin depender del cliente, una opción es utilizar tests de aprobación (http://blog.koalite.com/tag/approval-testing/). Quedan bastante limpios y te pueden ayudar a detectar cambios inesperados en el JSON a lo largo del ciclo de vida de la aplicación.

Un saludo,

Juanma.

Hugo Biarge

unread,
Jun 4, 2015, 12:53:21 PM6/4/15
to altnet-...@googlegroups.com
Para hacer test end to end de WebApi prueba el paquete Owin.Testing. Te permite crear un TestServer para hostear tu api y hacerle peticiones InProccess, rápidos y sin llegar al stack http.
Para probar el Authorize, crea y registra en el Startup de tu TestServer un Middleware de Owin que especifique el IPrincipal de la petición con los Claims que necesites.

Si buscas por Owin.Testing encontraras buenos ejemplos en internet.

Saludos!

Hugo Biarge

De: Edgar Ramos
Enviado: ‎25/‎05/‎2015 17:54

Para: altnet-...@googlegroups.com
Asunto: Re: [altnet-hispano] Json Unit Test

Carlos Admirador

unread,
Aug 31, 2022, 3:22:38 AMAug 31
to AltNet-Hispano
Tengo proyecto REST API NET 5 y otro Unit Tests NET 5 en Visual Studio 2019/2022 Community.Cómo puedo ejecutar las pruebas,  pues ahora si Inicio Nueva instancia para el REST API no podría...
Cómo ejecutar Unit Tests con REST API (desarrollada por mi)?

Cómo ejecutar Unit Tests con REST API externa (tipo Fake API como PokeAPI u otras)?

Si quieres crear test de integracion para poder invovar la web api desde el test se usa el TestServer
https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-5.0

Reply all
Reply to author
Forward
0 new messages