Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O modo de servidor MTP permite que um editor, uma IDE ou outra ferramenta de teste inicie uma aplicação de teste e controle a descoberta e a execução via JSON-RPC. Use o modo de servidor ao criar ferramentas em torno de MTP. Para execuções normais de linha de comando e CI, execute o aplicativo de teste diretamente ou use dotnet test.
Inicie o servidor de JSON-RPC público com --server ou --server jsonrpc.
Importante
O SDK do .NET usa um protocolo binário interno separado por meio de --server dotnettestcli. Não passe esse valor você mesmo.
dotnet test configura os argumentos de transporte e protocolo.
Use o cliente somente de origem
O MTP 2.4 fornece um cliente de JSON-RPC canônico. Adicione o pacote Microsoft.Testing.Platform.ServerMode.Client.Sources. O pacote injeta código-fonte em C# no seu projeto em vez de adicionar um assembly em tempo de execução.
O design baseado apenas na fonte fornece:
- Nenhuma DLL de runtime ou dependência de implantação adicional.
- Serialização sem reflexão compatível com AOT nativo.
- Tipos de protocolo e código de serialização do mesmo repositório que o servidor MTP.
Os tipos injetados IMtpServerClient, MtpServerClient e de protocolo podem inicializar uma conexão, descobrir testes, executar testes, solicitar o encerramento do servidor e relatar atualizações do nó de teste. Todos os tipos injetados permanecem internal para o assembly consumidor.
Atender aos requisitos do cliente
Use C# 12 ou mais recente. O pacote respeita a configuração de versão de idioma do projeto. Se o framework de destino usar por padrão uma versão anterior do C#, defina LangVersion como 12.0 ou posterior. O pacote também fornece tipos de compatibilidade interna para .NET Framework 4.6.2 e netstandard2.0.
Remova qualquer cópia escrita à mão do cliente MTP antes de adicionar o pacote para evitar tipos internos duplicados.
Escolher um modelo de inicialização
Para iniciar o aplicativo de teste como um processo externo, use MtpServerClient.LaunchAsync. O cliente é responsável por esse processo filho e o encerra durante a desinstalação, quando necessário.
Para um host incorporado ou um ambiente com thread de interface do usuário que não possa usar Process.Start, use MtpServerClient.LaunchInProcessAsync. O método executa o aplicativo de teste por meio de um callback assíncrono no processo atual. Não bloqueie a thread de inicialização porque o callback e o cliente estão no mesmo processo.
Ambos os modelos de inicialização usam um transporte TCP em loopback. O Navegador WebAssembly não pode criar o ouvinte necessário, portanto, a inicialização em processo gera PlatformNotSupportedException. A inicialização em processo não fornece um transporte WebAssembly alternativo.
Desligar o cliente
Para desinstalar o cliente e o aplicativo iniciado sem bloquear o thread de chamada, chame IMtpServerClient.ShutdownAsync(). O método assíncrono evita problemas de responsividade da thread da interface do usuário e de deadlock em hosts incorporados.
Para um host em processo, MtpServerClientOptions.ServerShutdownTimeout controla quanto tempo o teardown aguarda após o cliente fechar o transporte. O padrão é 30 segundos. Leia ServerExitCode após o encerramento para obter o código de saída do callback. O valor permanece null enquanto o aplicativo é executado ou quando o aplicativo falha em vez de retornar um código de saída.
Declarar cliente com estado
A partir do MTP 2.4.1, defina a opção nullable MtpServerClientOptions.IsStateful para descrever como o cliente consome atualizações de test-node:
| Valor | Declaração |
|---|---|
true |
O cliente mantém um conjunto endereçável de nós de teste para a sessão e mantém o último estado conhecido de cada nó até que outra atualização o altere, como um gerenciador de testes do IDE pode. |
false |
O cliente consome atualizações sem reter esse estado de nó de teste. |
null (predefinição) |
O cliente não declara a capacidade. O handshake de inicialização omite o campo. |
O cliente envia um valor booliano explícito por meio da capacidade de protocolo experimental capabilities.testing.isStateful. A persistência de estado é independente do tempo de vida da conexão e da capacidade MultiRequestSupport do servidor. Um cliente não se torna stateful apenas porque envia várias solicitações pela mesma conexão.
O MTP 2.4.0 usa uma opção booliana não anulável com um padrão de false. Para preservar uma funcionalidade não declarada, use o MTP 2.4.1 ou posterior.
Dentro de uma estrutura ou extensão, use o serviço experimentalIClientInfo para inspecionar a declaração. Leia clientInfo.Capabilities.IsStateful para obter um resultado booliano conservador, que é false quando a capacidade não é declarada. No MTP 2.4.1 ou posterior, ClientCapabilitiesExtensions.GetIsStateful() preserva a distinção entre clientes não declarados, explicitamente sem estado e com estado.
Negociar compatibilidade de protocolo
A partir do MTP 2.4, a negociação de protocolo no modo de servidor é independente da versão do pacote NuGet mtp. Um cliente declara as versões de protocolo compatíveis e o servidor seleciona uma versão comum. Quando não há nenhuma versão com suporte em comum, o aplicativo de teste é encerrado com o código de saída ProtocolError (12) em vez de prosseguir com um contrato de comunicação incompatível.
Use o esquema JSON versionado do modo de servidor 1.0 para validar mensagens. Os serializadores System.Text.Json e Jsonite seguem o mesmo esquema e envelope de erro.