Pruebas unitarias de aplicaciones de SignalR

por Patrick Fletcher

Warning

Esta documentación no es para la versión más reciente de Signalr. Eche un vistazo a ASP.net Core signalr.

En este artículo se describe el uso de las características de pruebas unitarias de Signalr 2.

Versiones de software utilizadas en este tema

Preguntas y comentarios

Deje comentarios sobre cómo le gustó este tutorial y lo que podríamos mejorar en los comentarios en la parte inferior de la página. Si tiene preguntas que no están directamente relacionadas con el tutorial, puede publicarlas en el foro de ASP.net signalr o stackoverflow.com.

Aplicaciones de Signalr de pruebas unitarias

Puede usar las características de pruebas unitarias de Signalr 2 para crear pruebas unitarias para la aplicación Signalr. Signalr 2 incluye la interfaz IHubCallerConnectionContext , que se puede usar para crear un objeto ficticio para simular los métodos de concentrador para las pruebas.

En esta sección, agregará pruebas unitarias para la aplicación creada en el tutorial de introducción con xUnit.net y MOQ.

XUnit.net se usará para controlar la prueba; MOQ se usará para crear un objeto ficticio para las pruebas. Si lo desea, puede usar otros marcos ficticios. NSubstitute también es una buena elección. En este tutorial se muestra cómo configurar el objeto ficticio de dos maneras: en primer lugar, mediante un objeto dynamic (introducido en .NET Framework 4) y el segundo, mediante una interfaz.

Contenido

Este tutorial contiene las siguientes secciones.

Pruebas unitarias con Dynamic

En esta sección, agregará una prueba unitaria para la aplicación creada en el Introducción tutorial con un objeto dinámico.

  1. Instale la extensión xUnit Runner para Visual Studio 2013.

  2. Complete el tutorial de introduccióno descargue la aplicación completada de la galería de código de MSDN.

  3. Si usa la versión de descarga de la aplicación Introducción, abra la consola del administrador de paquetes y haga clic en restaurar para agregar el paquete de signalr al proyecto.

    Restaurar paquetes

  4. Agregue un proyecto a la solución para la prueba unitaria. Haga clic con el botón derecho en la solución en Explorador de soluciones y seleccione Agregar, nuevo proyecto.. .. En el C# nodo, seleccione el nodo Windows . Seleccione biblioteca de clases. Asigne al nuevo proyecto el nombre TestLibrary y haga clic en Aceptar.

    Crear biblioteca de pruebas

  5. Agregue una referencia en el proyecto de biblioteca de pruebas al proyecto SignalRChat. Haga clic con el botón derecho en el proyecto TestLibrary y seleccione Agregar, referencia.. .. Seleccione el nodo proyectos en el nodo de la solución y compruebe SignalRChat. Haga clic en Aceptar.

    Agregar referencia de proyecto

  6. Agregue los paquetes Signalr, MOQ y XUnit al proyecto TestLibrary . En la consola del administrador de paquetes, establezca la lista desplegable proyecto predeterminado en TestLibrary. Ejecute los siguientes comandos en la ventana de la consola:

    • Install-Package Microsoft.AspNet.SignalR

    • Install-Package Moq

    • Install-Package XUnit

      Instalación de paquetes

  7. Cree el archivo de prueba. Haga clic con el botón derecho en el proyecto TestLibrary y haga clic en Agregar... , clase. Asigne a la nueva clase el nombre tests.CS.

  8. Reemplace el contenido de Tests.cs por el código siguiente.

    using System;
    using Xunit;
    using SignalRChat;
    using Microsoft.AspNet.SignalR.Hubs;
    using Moq;
    using System.Dynamic;
    
    namespace TestLibrary
    {
        public class Tests
        {
            [Fact]
            public void HubsAreMockableViaDynamic()
            {
                bool sendCalled = false;
                var hub = new ChatHub();
                var mockClients = new Mock<IHubCallerConnectionContext<dynamic>>();
                hub.Clients = mockClients.Object;
                dynamic all = new ExpandoObject();
                all.broadcastMessage = new Action<string, string>((name, message) => {
                    sendCalled = true;
                });
                mockClients.Setup(m => m.All).Returns((ExpandoObject)all);
                hub.Send("TestUser", "TestMessage");
                Assert.True(sendCalled);
            }
        }
    }
    

    En el código anterior, se crea un cliente de prueba mediante el Mock objeto de la biblioteca MOQ , de tipo IHubCallerConnectionContext (en signalr 2,1, asigna dynamic para el parámetro de tipo). La interfaz de IHubCallerConnectionContext es el objeto proxy con el que se invocan métodos en el cliente. A continuación, se define la función broadcastMessage para el cliente ficticio, de modo que la clase ChatHub pueda llamarla. A continuación, el motor de pruebas llama al método Send de la clase ChatHub, que a su vez llama a la función de broadcastMessage ficticia.

  9. Para compilar la solución, presione F6.

  10. Ejecute la prueba unitaria. En Visual Studio, seleccione probar, Windows, Explorador de pruebas. En la ventana Explorador de pruebas, haga clic con el botón secundario en HubsAreMockableViaDynamic y seleccione ejecutar pruebas seleccionadas.

    Explorador de pruebas

  11. Compruebe que la prueba se superó comprobando el panel inferior en la ventana del explorador de pruebas. La ventana mostrará que la prueba se ha superado.

    Prueba superada

Pruebas unitarias por tipo

En esta sección, agregará una prueba para la aplicación creada en el Introducción tutorial mediante una interfaz que contiene el método que se va a probar.

  1. Complete los pasos del 1-7 en el tutorial de pruebas unitarias con Dynamic .

  2. Reemplace el contenido de Tests.cs por el código siguiente.

    using Xunit;
    using SignalRChat;
    using Microsoft.AspNet.SignalR.Hubs;
    using Moq;
    
    namespace TestLibrary
    {
        public class Tests
        {
           
           public interface IClientContract
           {
               void broadcastMessage(string name, string message);
           }
           [Fact]
           public void HubsAreMockableViaType()
           {
               var hub = new ChatHub();
               var mockClients = new Mock<IHubCallerConnectionContext<dynamic>>();
               var all = new Mock<IClientContract>();
               hub.Clients = mockClients.Object;
               all.Setup(m => m.broadcastMessage(It.IsAny<string>(), 
                    It.IsAny<string>())).Verifiable();
               mockClients.Setup(m => m.All).Returns(all.Object);
               hub.Send("TestUser", "TestMessage");
               all.VerifyAll();
           }
        }
    }
    

    En el código anterior, se crea una interfaz que define la firma del método broadcastMessage para el que el motor de pruebas creará un cliente ficticio. A continuación, se crea un cliente ficticio mediante el Mock objeto, de tipo IHubCallerConnectionContext (en signalr 2,1, asigna dynamic para el parámetro de tipo). La interfaz de IHubCallerConnectionContext es el objeto proxy con el que se invocan métodos en el cliente.

    A continuación, la prueba crea una instancia de ChatHuby, a continuación, crea una versión ficticia del método broadcastMessage, que a su vez se invoca llamando al método Send en el concentrador.

  3. Para compilar la solución, presione F6.

  4. Ejecute la prueba unitaria. En Visual Studio, seleccione probar, Windows, Explorador de pruebas. En la ventana Explorador de pruebas, haga clic con el botón secundario en HubsAreMockableViaDynamic y seleccione ejecutar pruebas seleccionadas.

    Explorador de pruebas

  5. Compruebe que la prueba se superó comprobando el panel inferior en la ventana del explorador de pruebas. La ventana mostrará que la prueba se ha superado.

    Prueba superada