Teste de unidade em aplicativos do SignalR

por Patrick Fletcher

Aviso

Esta documentação não é para a versão mais recente do SignalR. Dê uma olhada em ASP.NET Core SignalR.

Este artigo descreve como usar os recursos de Teste de Unidade do SignalR 2.

Versões de software usadas neste tópico

Perguntas e comentários

Deixe comentários sobre como você gostou deste tutorial e o que poderíamos melhorar nos comentários na parte inferior da página. Se você tiver perguntas que não estão diretamente relacionadas ao tutorial, poderá postá-las no fórum do ASP.NET SignalR ou StackOverflow.com.

Aplicativos SignalR de teste de unidade

Você pode usar os recursos de teste de unidade no SignalR 2 para criar testes de unidade para seu aplicativo SignalR. O SignalR 2 inclui a interface IHubCallerConnectionContext , que pode ser usada para criar um objeto fictício para simular seus métodos de hub para teste.

Nesta seção, você adicionará testes de unidade para o aplicativo criado no tutorial Introdução usando XUnit.net e Moq.

XUnit.net será usado para controlar o teste; O Moq será usado para criar um objeto fictício para teste. Outras estruturas de simulação podem ser usadas, se desejado; O NSubstitute também é uma boa opção. Este tutorial demonstra como configurar o objeto fictício de duas maneiras: primeiro, usando um dynamic objeto (introduzido em .NET Framework 4) e segundo, usando uma interface.

Sumário

Este tutorial contém as seções a seguir.

Teste de unidade com Dinâmico

Nesta seção, você adicionará um teste de unidade para o aplicativo criado no tutorial Introdução usando um objeto dinâmico.

  1. Instale a extensão do Executor do XUnit para Visual Studio 2013.

  2. Conclua o tutorial Introdução ou baixe o aplicativo concluído da Galeria de Códigos do MSDN.

  3. Se você estiver usando a versão de download do aplicativo Introdução, abra o Console do Gerenciador de Pacotes e clique em Restaurar para adicionar o pacote SignalR ao projeto.

    Restaurar Pacotes

  4. Adicione um projeto à solução para o teste de unidade. Clique com o botão direito do mouse em sua solução em Gerenciador de Soluções e selecione Adicionar, Novo Projeto.... No nó C#, selecione o nó do Windows. Selecione Biblioteca de Classes. Nomeie o novo projeto testLibrary e clique em OK.

    Criar Biblioteca de Testes

  5. Adicione uma referência no projeto de biblioteca de teste ao projeto SignalRChat. Clique com o botão direito do mouse no projeto TestLibrary e selecione Adicionar, Referência.... Selecione o nó Projetos no nó Solução e marcar SignalRChat. Clique em OK.

    Adicionar Referência de Projeto

  6. Adicione os pacotes SignalR, Moq e XUnit ao projeto TestLibrary . No Console do Gerenciador de Pacotes, defina a lista suspensa Projeto Padrão como TestLibrary. Execute os seguintes comandos na janela do console:

    • Install-Package Microsoft.AspNet.SignalR

    • Install-Package Moq

    • Install-Package XUnit

      Instalar pacotes

  7. Crie o arquivo de teste. Clique com o botão direito do mouse no projeto TestLibrary e clique em Adicionar..., Classe. Nomeie a nova classe Tests.cs.

  8. Substitua o conteúdo de Tests.cs pelo código a seguir.

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

    No código acima, um cliente de teste é criado usando o Mock objeto da biblioteca Moq , do tipo IHubCallerConnectionContext (no SignalR 2.1, atribua dynamic para o parâmetro de tipo).) A IHubCallerConnectionContext interface é o objeto proxy com o qual você invoca métodos no cliente. Em broadcastMessage seguida, a função é definida para o cliente fictício para que possa ser chamada pela ChatHub classe . Em seguida, o mecanismo de teste chama o Send método da ChatHub classe , que, por sua vez, chama a função simulada broadcastMessage .

  9. Crie a solução pressionando F6.

  10. Execute o teste de unidade. No Visual Studio, selecione Testar, Windows, Testar Explorer. Na janela Testar Explorer, clique com o botão direito do mouse em HubsAreMockableViaDynamic e selecione Executar Testes Selecionados.

    Captura de tela mostrando HubsAreMockableViaDynamic selecionado na janela Testar Explorer.

  11. Verifique se o teste foi aprovado verificando o painel inferior na janela Testar Explorer. A janela mostrará que o teste foi aprovado.

    Captura de tela mostrando o teste de unidade usando um objeto dinâmico passado.

Teste de unidade por tipo

Nesta seção, você adicionará um teste para o aplicativo criado no tutorial Introdução usando uma interface que contém o método a ser testado.

  1. Conclua as etapas de 1 a 7 no tutorial Teste de unidade com Dinâmico acima.

  2. Substitua o conteúdo de Tests.cs pelo código a seguir.

    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();
           }
        }
    }
    

    No código acima, uma interface é criada definindo a assinatura do método para o broadcastMessage qual o mecanismo de teste criará um cliente fictício. Em seguida, um cliente fictício é criado usando o Mock objeto do tipo IHubCallerConnectionContext (no SignalR 2.1, atribua dynamic para o parâmetro de tipo).) A IHubCallerConnectionContext interface é o objeto proxy com o qual você invoca métodos no cliente.

    Em seguida, o teste cria uma instância do ChatHube cria uma versão simulada do broadcastMessage método , que, por sua vez, é invocado chamando o Send método no hub.

  3. Crie a solução pressionando F6.

  4. Execute o teste de unidade. No Visual Studio, selecione Testar, Windows, Testar Explorer. Na janela Testar Explorer, clique com o botão direito do mouse em HubsAreMockableViaDynamic e selecione Executar Testes Selecionados.

    Captura de tela mostrando HubsAreMockableViaType selecionado na janela Testar Explorer.

  5. Verifique se o teste foi aprovado verificando o painel inferior na janela Testar Explorer. A janela mostrará que o teste foi aprovado.

    Captura de tela mostrando que o teste de unidade por tipo foi aprovado.