Modo servidor

O modo servidor MTP permite que um editor, IDE ou outra ferramenta de teste lance uma aplicação de teste e conduza a descoberta e execução através de JSON-RPC. Usa o modo servidor quando construíres ferramentas em torno do MTP. Para execuções normais de linha de comandos e CI, execute a aplicação de teste diretamente ou use dotnet test.

Inicie o servidor público de JSON-RPC com --server ou --server jsonrpc.

Importante

O SDK .NET utiliza um protocolo binário interno separado através de --server dotnettestcli. Não passes esse valor tu próprio. dotnet test configura os argumentos de transporte e protocolo.

Utilize apenas o cliente de origem

A pré-visualização do MTP 2.4 fornece um cliente JSON-RPC canónico. Adicione o pacote Microsoft.Testing.Platform.ServerMode.Client.Sources. O pacote injeta código-fonte C# no seu projeto em vez de adicionar uma assemblagem em tempo de execução.

A conceção apenas de origem proporciona o seguinte:

  • Sem DLL em tempo de execução ou dependência adicional de implementação.
  • Serialização nativa compatível com AOT, sem reflexão.
  • Tipos de protocolo e código de serialização provenientes do mesmo repositório do servidor MTP.

Os tipos injetados MtpServerClient, IMtpServerClient e de protocolo podem inicializar uma conexão, descobrir testes, executar testes, solicitar o encerramento do servidor e comunicar atualizações do nó de teste. Todos os tipos injetados permanecem internal no conjunto consumidor.

Cumprir os requisitos do cliente

Usa C# 12 ou mais tarde. O pacote define LangVersion como 12.0 caso o seu projeto não especifique uma versão da linguagem. Também fornece tipos de compatibilidade interna para o .NET Framework 4.6.2 e netstandard2.0.

Remova qualquer cópia manuscrita do cliente MTP antes de adicionar o pacote para evitar tipos internos duplicados.

Escolha um modelo de lançamento

Para iniciar a aplicação de teste como um processo externo, use MtpServerClient.LaunchAsync. O cliente é responsável por esse processo subordinado e termina-o durante a fase de encerramento, quando necessário.

Para um ambiente de host embutido ou UI-thread que não pode usar Process.Start, use MtpServerClient.LaunchInProcessAsync. O método executa a aplicação de teste através de um callback assíncrono no processo atual. Não bloqueie o tópico de lançamento porque o callback e o cliente partilham o processo.

Ambos os modelos de lançamento utilizam um transporte TCP em loopback. Como o WebAssembly do navegador não consegue criar o listener necessário, o arranque no processo lança PlatformNotSupportedException. O lançamento em processo não oferece um transporte alternativo do WebAssembly.

Desliga o cliente

Para encerrar o cliente e a aplicação iniciada sem bloquear a thread de chamada, chame IMtpServerClient.ShutdownAsync(). O método assíncrono evita problemas de capacidade de resposta do thread da IU e de interbloqueio em hosts embebidos.

Para um host em processo, MtpServerClientOptions.ServerShutdownTimeout controla quanto tempo a desmontagem demora após o cliente fechar o transporte. O padrão é 30 segundos. Leia ServerExitCode após o desligamento para obter o código de saída do callback. O valor mantém-se null enquanto a aplicação está a correr ou quando a aplicação falha, em vez de devolver um código de saída.

Escolher comportamento de ligação

Definir MtpServerClientOptions.IsStateful para indicar ao servidor se o cliente preserva o estado entre solicitações:

  • Deixe o valor false para um único pedido de descoberta ou execução seguido de saída.
  • Defina o valor como true para uma sessão de editor ou IDE que envie múltiplos pedidos na mesma ligação.

O cliente envia esta configuração através da capacidade do protocolo experimental capabilities.testing.isStateful .

Ver também