Por que o Visual Studio 2015/2017/2019 Test Runner não está descobrindo meus testes do xUnit v2

173

ATUALIZAÇÃO: Adicionando um 2019; o mecanismo de integração de descoberta / corredor é o mesmo de 2017 e 2015; portanto, as principais coisas que podem dar errado são as mesmas.


Eu li Por que o corredor xUnit não encontra meus testes, o que cobre os motivos pelos quais o xUnit nunca seria capaz de encontrar seus testes, mas meu problema é diferente - estou confiante de que não há nada sutil nos meus testes; (eles funcionaram em outros ambientes, isso parece ser apenas minha máquina) - o Visual Studio Test Runner no Visual Studio 2015 [Community Edition] simplesmente não está mostrando nenhum dos meus testes. Não estou fazendo nada remotamente emocionante; os testes têm como alvo xUnit.net v2 na área de trabalho.

Eu olhei na janela Saída e não estou vendo nada em Teste em Mostrar saída nas guias.

Ruben Bartelink
fonte
related: stackoverflow.com/questions/16214684/...
Ruben Bartelink
1
É apenas um problema possível, mas obviamente você precisa compilar o projeto de teste antes que ele seja mostrado no test explorer.
Niklas Peter
related: stackoverflow.com/a/29589576/6913871
Ruben Bartelink
Isso funcionou para mim - stackoverflow.com/questions/42861930/…
Prisioner ZERO
A instalação do Xunit.Runner.VisualStudio resolveu meu problema
Bendram 30/06

Respostas:

210
  1. Elimine as exceções de descoberta de suas consultas; vá para a janela de saída (Ctrl-Alt-O), depois alterne a saída do show do menu suspenso (Shift-Alt-S) para testes e verifique se não há exceções de descoberta

  2. Teste | Configurações de teste | A arquitetura padrão do processador pode ajudar se seus testes forem específicos para x86 / x64 e a descoberta estiver desencadeando exceções relacionadas à fragilidade, ou seja, AnyCpu

  3. Como sugerido nesta resposta (faça um upvote se a técnica ajudar), executar o corredor do console da área de trabalho ( instruções ) pode ser uma boa verificação cruzada para eliminar outras possibilidades, por exemplo, arquivos de configuração desconectados: -

    packages\xunit.runner.console.2.2.0\tools\xunit.console <tests.dll>

    OBSERVAÇÃO O xunit.runner.consolepacote está obsoleto - quando você colocar as coisas funcionando no VS, também poderá dotnet testexecutá-las em contextos de IC


Leia a documentação - é abrangente, atualizado, inclui informações sobre solução de problemas e utiliza PRs: -

Nota importante: Se você já instalou o xUnit.net Visual Studio Runner VSIX (extensão), desinstale-o primeiro. O corredor do Visual Studio é distribuído apenas via NuGet agora. Para removê-lo, vá em Ferramentas > Extensões e Atualizações . Role até o final da lista e, se o xUnit.net estiver instalado, desinstale-o. Isso forçará você a reiniciar o Visual Studio.

Se você estiver tendo problemas para descobrir ou executar testes, poderá ser vítima de um cache de corredor corrompido no Visual Studio. Para limpar esse cache, desligue todas as instâncias do Visual Studio e exclua a pasta %TEMP%\VisualStudioTestExplorerExtensions. Verifique também se o seu projeto está vinculado apenas a uma única versão do pacote NuGet do Visual Studio runner ( xunit.runner.visualstudio).

Os seguintes passos funcionaram para mim:

  1. (Somente se você suspeitar que há uma bagunça séria na sua máquina - em geral, o caso mais comum é que a integração do visual studio simplesmente ainda não está instalada)

    Faça o DEL %TEMP%\VisualStudioTestExplorerExtensionsque é recomendado: -

    PS> del $env:TEMP\VisualStudioTestExplorerExtensions

  2. Instale o pacote NuGet xunit.runner.visualstudioem todos os projetos de teste

    • Pacote:

      .paket\paket add nuget xunit.runner.visualstudio -i

      Você precisa terminar com o seguinte empaket.dependencies :

      nuget xunit.runner.visualstudio version_in_path: true

      Observe que o version_in_path: truebit é importante

    • Nuget: Vá para o Console do Gerenciador de Pacotes (Alt-T, N, O) e

      Install-Package xunit.runner.visualstudio)

    Reconstrua para garantir que xunit.runneracabe no diretório de saída

  3. Close Test Explorer <- esse foi o bit que faltava para mim

  4. Abra novamente o Explorador de Testes (Alt-S, W, T)

  5. Executar todos os testes (Ctrl R, A)

Ruben Bartelink
fonte
12
"Close Test Explorer <- este foi o bit que faltava para mim" Este é o passo mais importante que eu também perdi e passei 5 horas para descobrir. Obrigado, eu deveria ter prestado atenção aos passos :)
Esen
1
o xunit VS runner estava trabalhando para o meu sln. No entanto, ele parou de aparecer um dia. Descobri que eu não instalei o VS em execução e provavelmente estava funcionando por causa do cache, deixado pelo outro sln que possui o corredor instalado. Depois de instalar o corredor, as coisas funcionam bem novamente. Portanto, não esqueça de instalar o corredor para todos os sln.
ZZZ
1
Isto é inacreditável. A exclusão da pasta que continha três outras pastas vazias corrigiu o problema.
t3chb0t
1
@martinJH Eu tenho uma resposta automática para isso (Linked in OP): - stackoverflow.com/questions/16214684/… ;) Não estou revelando como eu descobri isso
Ruben Bartelink
1
Coisas realmente estranhas, mas excluir %TEMP%\VisualStudioTestExplorerExtensionse reiniciar o VS finalmente funcionou!
Hinrich
35

Eu tive que alterar as configurações de teste depois de alterar a CPU dos projetos de teste para x64. Em seguida, os testes foram detectados novamente.

Arquitetura

Máx.
fonte
Você viu uma mensagem antes disso na saída da descoberta de teste?
Ruben Bartelink
Não, eu não vi nenhum erro, demorou um pouco para descobrir.
Max
Hmm; estranho (ver topo da minha resposta - explica onde procurar, normalmente este é sinalizada (embora existam casos def onde simplesmente não há mensagens em qualquer lugar))
Ruben Bartelink
Isso consertou para mim. Não sei por que isso ajuda, mas ajuda.
VSO 14/12
2
Eu tive que limpar -> reconstruir depois de mudar.
usar o seguinte comando
32

Nenhuma das soluções acima funcionou para mim (dotnetcore 1.1, VS2017). Aqui está o que foi corrigido:

  1. Adicionar pacote NuGet Microsoft.TestPlatform.TestHost
  2. Adicionar pacote NuGet Microsoft.NET.Test.Sdk

Esses são além desses pacotes que eu instalei antes:

  • xunit (2.3.0-beta1-build3642)
  • xunit.runner.visualstudio (2.3.0-beta1-build1309)
Arman
fonte
9
Isso me ajudou, estava faltando o pacote xunit.runner.visualstudio.
Ognjen Babic
Meu .NET projeto 4,72 MS teste necessária TestPlatform.TestHostapenas quando a migração do VS 2017 para VS 2019.
ΩmegaMan
Isso resolveu para mim. Na janela Saída, selecione Testes na lista suspensa => veja a mensagem "falta TestHost".
datchung 10/06
22

Instale o xunit.runner.visualstudiopacote para o projeto de teste

Chris Aelbrecht
fonte
Melhor resposta na página. Corrigido o meu problema.
RB Davidson
14

Siga estes passos:

  1. Atualize seu MsTest.TestAdaptere MsTest.TestFramework dll'sde nugget package manager.
  2. Limpe sua solução
  3. Crie sua solução.
Venkat Ramanan
fonte
1
Você pode abrir um clone desta pergunta e responder por favor, como eu fiz? Este é sobre o xUnit v2 e posterior. Mesmo as respostas xUnit v1 não têm lugar aqui. Você pode vincular a ele com um ver também na parte superior da pergunta, ou eu posso vincular a ele na questão #
Ruben Bartelink 17/17
Esta solução funciona .. Caso contrário, toda vez que eu tinha que remover %TEMP%\VisualStudioTestExplorerExtensionse ainda às vezes eu tinha que executar os testes do console.
Venky
Estou usando o NUnit e resolvi esse problema atualizando o NUnit3TestAdapter para a versão mais recente via NuGet.
Dpberry178
Obrigado por isso - na minha instância, só tive que atualizar o pacote - reinstalar o MSTest.TestAdapter e os testes foram selecionados.
Rob
10

Eu estive lutando com isso a tarde toda enquanto trabalhava com um projeto ASP Core e o xUnit 2.2.0. A solução para mim foi adicionar uma referência aMicrosoft.DotNet.InternalAbstractions

Eu descobri isso ao tentar executar o projeto de teste manualmente com o dotnet testqual falhou, mas relatou que InternalAbstractionsestava faltando. Não vi esse erro na janela de saída do teste quando a descoberta automática falhou. A única informação que vi na janela de descoberta foi um código de retorno, o que não significava nada para mim no momento, mas, em retrospectiva, provavelmente estava indicando um erro.

Tom Makin
fonte
"mas relatou um erro útil" ... qual foi? Além disso, você pode verificar se ele definitivamente não está listado na janela de erros de descoberta, conforme declarado no OP - ou seja, você pode afirmar com confiança "Eu procurei na janela Saída e não estou vendo nada em Testes na guia Mostrar saída nas guias . " ?
Ruben Bartelink #
1
Consulte a resposta atualizada, publicarei as informações do código de retorno posteriormente, caso sejam relevantes.
213456 Tom Maykin
9

Já aconteceu comigo algumas vezes - quando eu limpo o projeto e o construo novamente, ele tende a ficar bem.

Liam
fonte
alguma mensagem reveladora quando você olha na janela de saída com testes selecionados na lista suspensa?
Ruben Bartelink
2
Nenhum, ele apenas diz Não há testes encontraram
Liam
No meu caso, o Test Explorer estava pendurado em um teste que falhou anteriormente. Se eu navegasse até ele e tentasse clicar com o botão direito do mouse -> Executar ou qualquer outra coisa, todo o VS seria interrompido. Apenas fazer uma limpeza e reconstrução limpou o status do teste e corrigiu o problema para mim.
Piedone
Devo acrescentar que simplesmente criar (ou seja, F6) não ajuda, é necessário clicar com o botão direito do mouse na solução no VS Solution Explorer e clicar em Rebuild Solution.
Piedone
8

Verifique se sua classe de teste é pública .

erva
fonte
isso é explicitamente abordado na primeira condição (vinculo a outra questão que cobre esse caso); este Q + A é apenas para solucionar problemas de como normalmente os testes OK que funcionam em outros locais não funcionam para alguém que agora esteja em um determinado ambiente. Para mim, essa resposta apenas confunde as questões, pois dilui esse distino.
Ruben Bartelink 21/10/19
1
Muito obrigado Você salvou o meu dia.
hellouworld 15/01
7

O motivo, no meu caso, foi que a criação do destino não era a mesma entre o depurador do projeto e o executor de teste. Para unificar esses elementos:

  1. Teste> Configurações de teste> Arquitetura padrão do processador. depois selecione X64 ou X86.
  2. Projeto> (seu projeto) Propriedades> Construir (guia)> destino da plataforma.

Depois que eles forem idênticos, recrie sua solução e os métodos de teste aparecerão para você.

Jawad Sabir
fonte
6

Depois de passar 2 dias ... nenhuma das opções acima funcionou para mim. A única "solução" foi: Vá para as propriedades do projeto -> Guia Compilar. Em seguida, clique no botão Avançado no canto inferior direito do painel. Altere "Informações de depuração:" para "cheio" e clique em OK.

Aqui estão as capturas de tela: insira a descrição da imagem aqui

insira a descrição da imagem aquiinsira a descrição da imagem aqui

curiousBoy
fonte
parece doloroso. Obrigado por compartilhar e espero que ajude alguém algum dia. No entanto, tenho que dizer: não consigo pensar em nenhuma razão para o nível de informações de depuração afetar o processo de descoberta, então só posso dizer "Não acho que foi isso que realmente matou o urso" - vamos torcer para que eu esteja errado embora;)
Ruben Bartelink
O @ RubenBartelink concorda plenamente com você, por isso mencionei "solução" em uma citação :), mas estranho o suficiente, funcionou imediatamente depois que eu fiz isso.
precisa saber é o seguinte
Muito obrigado. Esta foi também a correção para me :)
Babulaas
6

Estou usando o xUnit 2.2.0.

Meu problema foi que minha solução não conseguiu encontrar determinadas DLLs e app.configestava tentando resolvê-las. O erro não estava aparecendo na janela de saída do teste no Visual Studio.

Consegui identificar o erro quando instalei xunit.runner.consolee tentei executar os testes através da linha de comando.

Como executar testes de xunit na CLI .

SohamC
fonte
5

Posso fornecer uma solução para um caso de ponta que encontrei alguns dias atrás. Não será a solução que se encaixa em todos os cenários descritos acima, no entanto, para o caso de ponta que eu o corrigi.

Eu tive o mesmo problema com o VS 2017 mais recente (versão 15.5.7) e o XUnit 2.3.1. O pacote xunit.runner.visualstudio foi instalado, no entanto, os testes não foram exibidos no explorador de testes interno do VisualStudio.

Eu estava trabalhando em um projeto legado que tinha como alvo o .NET framework 4.5. No entanto, começando com a versão 2.2. O XUnit não suporta estruturas .NET inferiores à 4.5.2 (consulte as Notas da versão - XUnit 2.2: 19 de fevereiro de 2017

Alterar a estrutura de destino do projeto de teste para uma versão> = 4.5.2 funcionou para mim. Você não precisa alterar a versão do projeto que está testando; trata-se apenas do próprio projeto de teste.

baumgarb
fonte
5

Eu tive o mesmo problema com o Visual Studio 2019. Acabei de instalar os seguintes pacotes NuGet e o problema foi resolvido.

1) xUnit

2) xunit.runner.visualstudio

3) Microsoft.TestPlatform.TestHost

4) Microsoft.NET.Test.Sdk

Chamila Maddumage
fonte
3

Isso também pode ocorrer porque a caixa de seleção de compilação não está sendo marcada para o projeto de plataforma atual na configuração de compilação. Clique em Build | Gerenciador de configuração e verifique se os projetos de teste estão marcados na coluna de construção da plataforma que você está usando (por exemplo, 'x86').

Essa foi definitivamente a solução que funcionou para mim.

cd747
fonte
Eu upvote este se fosse em stackoverflow.com/questions/16214684/... como este não é xunit2 específico e um elemento de boa lista
Ruben Bartelink
3

Verifique se você não escreveu seus testes de unidade em uma biblioteca de classes do .NET Standard 2.0. O visualstudio runner não suporta a execução de testes nas bibliotecas de classes netstandard2.0 no momento da redação deste documento.

Verifique aqui a matriz de compatibilidade do Test Runner:

https://xunit.github.io/#runners

vullnetyy
fonte
3

Ocorreu um problema semelhante com o VS não descobrindo métodos de teste. No meu caso, eu tinha a palavra-chave estática com o método, que eu removi e funcionou.

[TestMethod]

Before: public static void Test1()

After: public void Test1()
amor ao vivo
fonte
1
Eu realmente preferiria que isso não estivesse aqui, pois trata-se de testes corretos que não podem ser encontrados em uma instância específica do VS. Eu tenho uma resposta automática sobre por que um teste de xunidade não pode ser descoberto: stackoverflow.com/questions/16214684/… . Posso sugerir que você crie um por que o meu teste MSTest não pode ser obtido (pelo VS, se você quiser). (Como você PROB sabe, essa preocupação particular não até mesmo aplicar para xUnit que é outra razão pela qual, útil como é, a sua resposta não pertence aqui)
Ruben Bartelink
O MSTest não encontrou meus testes porque o modificador de acesso à classe era interno.
Abdul Saboor
3
  1. Feche todas as instâncias do Visual Studio
  2. Vá para% TEMP% \ VisualStudioTestExplorerExtensions \
  3. Excluir pastas relacionadas ao specrun
  4. Tente novamente

me avise obrigado

alvarodoune
fonte
2

No meu caso, eu tinha 2 projetos de teste diferentes na solução. Os testes do Projeto 1 foram encontrados, mas os testes do Projeto 2 não. Descobri que, primeiro, ao descarregar o projeto de teste 1, depois fechar o VS> limpar meus arquivos temporários> abrir novamente a solução> reconstruir, permiti que o VS descobrisse meus testes do projeto 2.

Estou assumindo que algo deve estar em conflito entre os dois projetos de teste e essa foi a maneira mais rápida de me colocar em funcionamento em alguns minutos. As torções podem ser resolvidas mais tarde :).

Zach J.
fonte
2

Eu sofria desse problema há muito tempo.

  • Eu tinha cerca de 100 projetos, uma versão diferente foi implantada em um servidor diferente.

  • A atualização do xunit de 2.2.0 para 2.3.1 não foi uma solução porque a compilação estava com falha no 2.3.1.

Acabei de atualizar o xunit.runner.visualstudio para a 2.3.1 e tudo começou a funcionar bem. Eu usei esse comando no console do gerenciador de pacotes para atualizar meu pacote xunit.runner.visualstudio

Get-Project ComapanyName.ProjectName.*.Tests | Install-Package xunit.runner.visualstudio -Version 2.3.1
Nafeez Abrar
fonte
1

O culpado mais comum para mim foi o Visual Studio tentando executar os testes usando uma arquitetura diferente da biblioteca que está testando. Infelizmente, existem vários lugares onde parece que isso pode dar errado.

No VS 2017, tente criar um arquivo de configurações de execução, por exemplo, Default.runsettingsno seu projeto de teste. Se sua biblioteca principal for x64, o conteúdo deve ser:

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <RunConfiguration>
    <TargetPlatform>x64</TargetPlatform>
  </RunConfiguration>
</RunSettings>

Em seguida, escolha este arquivo em Teste -> Configurações de teste -> Selecione Arquivo de configurações de teste.

Em seguida, em Teste -> Configurações de teste, Arquitetura padrão do processador, escolha a arquitetura correta novamente.

Certifique-se de limpar e criar a solução inteira. Pode ser necessário fechar e reabrir a janela do Gerenciador de Testes. Procure por erros adicionais na janela Saída -> Teste, para obter mais dicas sobre tipos de arquitetura incorretos.

As entradas adicionais das Configurações de teste da FYI podem ser encontradas aqui .

Tobias J
fonte
1

Há um outro motivo que pode fazer com que o Test Explorer não mostre nenhum teste, e tem a ver com o novo .pdbformato de arquivo portátil introduzido no Visual Studio 2017 / for .NET Core que pode interromper algumas ferramentas do VS. ( Segundo plano: consulte o relatório de erros "Mono.Cecil causa OutOfMemoryException com novos PDBs .csproj" .)

Seus testes não foram encontrados devido ao novo formato portátil .pdb(símbolos de depuração)?

  • Abra a janela Saída .
  • Altere a seleção suspensa para Mostrar saída de para Testes .
  • Se você vir uma saída semelhante à seguinte (possivelmente repetida uma vez para cada um dos seus testes), terá o problema descrito nesta resposta:

    Exception System.OutOfMemoryException, Exception converting <SignatureOfYourTestMethod>
    Array dimensions exceeded supported range.

Se sim, faça isso para resolver o problema:

  • Abra as propriedades do seu projeto de teste (selecione o projeto de teste no Solution Explorer e pressione Alt+ Enter).
  • Alterne para a guia Compilar .
  • Clique no botão Avançado ... (localizado no final dessa página da guia).
  • Na drop-down rotulados informações de depuração , escolha none, pdb-onlyou full, mas NÃO portable . É essa última configuração que faz com que os testes não sejam encontrados.
  • Clique em OK e limpe e reconstrua seu projeto. Se você quiser ter certeza, acesse o diretório de saída do seu projeto de teste e limpe todos os .pdbarquivos antes de reconstruir. Agora seus testes devem estar de volta.
stakx - não está mais contribuindo
fonte
1

Aconteceu comigo quando fiz minhas primeiras tentativas de caminhada com o IntelliTest no VS 2017.

Às vezes, quando o projeto de teste é criado automaticamente pelo IntelliTest, a referência de montagem para Microsoft.ExtendedReflection( ... \ Arquivos de Programas (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ Extensões \ Microsoft \ Pex \ Microsoft.ExtendedReflection. DLL ) está ausente. Quando adicionados, os testes gerados aparecerão no test explorer após a recompilação.

cristão
fonte
1

Isenção de responsabilidade: não se trata de xunit com o visual studio 2015, mas do Visual Studio 2017 com um aplicativo de teste de unidade UWP (MSTest). Eu cheguei a este tópico pesquisando a mesma coisa, então talvez alguém faça o mesmo :)

A solução para mim foi atualizar os pacotes de nuget para MSTest.TestAdapter e MSTest.TestFramework. Parece que quando você cria um aplicativo de teste de unidade para UWP, não recebe automaticamente as versões mais recentes.

Alex Albu
fonte
Sugiro que faça uma pergunta auto-respondida, como fiz, é a melhor maneira de sequestrar essas informações - sinta-se à vontade para copiar e colar toda a minha pergunta es / xUnit / MSTest / se você achar que faz sentido;)
Ruben Bartelink
1

Meu problema foi resolvido instalando o nuget xunit.runner.visualstudio

kDar
fonte
1

No meu caso, tenho vários projetos de teste na mesma solução e apenas um dos projetos não exibia o "Test Explorer"

Eu fui ao "Manage Nuget Package for Solution" clicando com o botão direito do mouse na solução.

Percebi que, na guia "Consolidar", havia alguns pacotes de nuget "Teste" que estavam fora de sincronia entre os projetos. Eu cliquei em "Instalar" e meus testes ausentes apareceram.

CBBSpike
fonte
1

Eu tentei a maioria das sugestões acima e nada funcionou. No meu caso, estou em uma equipe e os testes estavam aparecendo para outros desenvolvedores para a mesma solução. Então, tentei excluir minha pasta .vs, mas também não tive sorte.

Acabei excluindo totalmente minha pasta local e clonando novamente o repositório. Isso resolveu para mim.

Paul G
fonte
1

Aqui está a solução que funcionou para nós. Não é o melhor, mas talvez alguém possa se beneficiar.

Fundo:

  • Nossos scripts foram desenvolvidos com o VS 2013 e usaram o NUnit VS Adapter 2.1.
  • Recentemente, migramos para o VS 2017 e quando abrimos a mesma solução - o teste não seria exibido no Test Explorer

No Build, veríamos esta mensagem:

[Informational] NUnit Adapter 3.10.0.21: Test discovery starting
[Informational] Assembly contains no NUnit 3.0 tests: C:\ihealautomatedTests\SeleniumTest\bin\x86\Debug\SeleniumTest.dll
[Informational] NUnit Adapter 3.10.0.21: Test discovery complete

Solução (temporária):

  • Desinstalar NUnit Adapter 3.10 ...
  • Instale o adaptador NUnit VS 2.1.

Agora os testes são mostrados.

Andrew Homsky
fonte
Por favor, extrair o seu (pelo menos aparentemente) nova pergunta para o seu próprio posto para tornar esta uma resposta clara :)
geisterfurz007
... Intitulado "por que o NUnit TestAdapter v3 não está vendo meus testes do NUnit v2? E a) execute um ping aqui b) coloque um" veja também <link> "no topo (mesmo que seja um pouco tênue), mas eu como esta resposta removida, pois não se encaixa bem xUnit v2 testsno título #
Ruben Bartelink 30/05
0

Verifique também se um arquivo app.config completamente vazio (completamente em branco, sem absolutamente nenhuma marcação) está dentro do projeto de teste. Este foi o culpado no meu caso.

Gopal Krishnan
fonte
0

No meu caso, criei uma nova "Configuração da solução", como mostrado na imagem. Portanto, quando eu seleciono o meu personalizado como "Prod", ele não reconhece o TestMehods por algum motivo. Mudar de volta para "Debug" resolve o problema

insira a descrição da imagem aqui

batmaci
fonte
0

Não sei se alguns de vocês também usam o JustMock, mas tive que desativar o criador de perfil no VS 2017 para que a detecção de teste funcionasse.

chrisdrobison
fonte
Hummm. Se você ligá-lo novamente, ele falha imediatamente novamente?
Ruben Bartelink
Sim. Se eu fechar a solução, ligar o criador de perfil e voltar, a detecção de teste falhará.
Chrisdrobison