O Visual Studio 2013 não descobre testes de unidade

146

Eu tenho uma solução simples no visual studio 2013 que é composta por um projeto da web, um projeto de biblioteca e um projeto de teste de unidade. Quando abro a solução e tento executar os testes de unidade, eles não são descobertos pelo visual studio. Para executar os testes, tento ir ao menu e escolher Teste -> Executar -> Executar todos os testes ou abrindo a janela do test explorer. Por esses métodos, o visual studio não descobre nenhum teste na solução.

Criando primeiro um projeto simples de testes de unidade e tentando executar o teste, o Visual Studio sabe descobrir o teste e eu posso executá-lo. Então, se eu abrir minha solução anterior, o visual studio agora descobrirá todos os testes. Tento salvar minha solução, mas fechando-a e reabrindo, sem criar um projeto de teste de unidade primeiro, o visual studio não encontra os testes novamente. Esse é um comportamento muito estranho que eu não sei por que isso está acontecendo.

Eu costumava trabalhar sozinho neste projeto que estava usando o git de controle de fonte integrado à fundação da equipe do visual studio. O problema do visual studio não descobrir os testes de unidade começa quando um novo elemento chega ao projeto e quando preciso recriar a solução através do controle de origem online. Antes disso, todos os testes sempre eram descobertos pelo visual studio.

Para a criação dos testes de unidade, uso a dll Microsoft.VisualStudio.QualityTools.UnitTestFramework. Minha versão do visual studio é: Microsoft Visual Studio Express 2013 para Web Versão 12.0.30723.00 Atualização 3. Minha versão da estrutura .net é 4.5.50938.

Todos os meus testes são assim:

[TestClass] 
public class Service1Test 
{ 
    [TestMethod] 
    public void Test1() 
    {
        Assert.IsTrue(True); 
    } 
}
miguelbgouveia
fonte
2
Esses testes de unidade assíncronos são baseados?
21714 Jamie Keeling
Não sabia qual era o problema, mas a execução como administrador corrigiu o problema para mim.
Sriram Sakthivel 14/08/14
Todos os testes de unidade base de sincronização
miguelbgouveia
2
Você já experimentou um executor de testes externo (como ReSharpers ou NCrunch)? Talvez a sua instalação está grampeada (assim reinstalar VS)
Carsten
1
Nenhum destes corrigiu o problema para mim :( Que desastre Eu desisti NUnit e estou contando com UnitTestFramework -. Bizarramente o problema oposto do OP
Adam

Respostas:

210

Algumas coisas que notei que tenho que fazer de tempos em tempos para que os testes apareçam corretamente.

  1. Se sua solução está em uma unidade protegida e você precisa de acesso de administrador para ler / gravar, algumas vezes apenas uma parte dos testes é exibida. Definitivamente, execute o VS como administrador nesse caso.

  2. Se sua solução for de 64 bits, verifique se Teste> Configurações de teste> Arquitetura padrão do processador está definido como x64. Às vezes, é definido como x86. Defina-o como x64 e depois recrie.

  3. Às vezes, apenas reiniciar o Visual Studio faz o truque porque o test explorer será iniciado novamente.

  4. Não se esqueça de criar o projeto / solução de teste. (Se você deseja que ele seja construído com o restante dos projetos, clique com o botão direito do mouse em sua solução> Propriedades> Propriedades de configuração> Configuração> marque a caixa "Build" para o seu projeto de teste)

  5. Verifique se os testes estão em uma publicseção da sua classe de teste

AndyG
fonte
34
Sei que essa resposta está um pouco atrasada, mas minha pesquisa no Google me trouxe aqui, e nada mencionado resolveu meu problema. Eventualmente, descobri que era o # 2 da minha lista, então queria deixar esse conhecimento, além dos outros truques que aprendi ao longo do tempo.
AndyG 18/03/2015
7
Uma combinação de # 2 e # 3 fez isso por mim. O Visual Studio reclamou que vários projetos (sem teste) da minha solução foram excluídos da etapa de descoberta de teste porque foram criados para o x86, mas tudo bem.
Nate Barbettini
4
Descobri que minhas configurações estavam corretas e a reinicialização não funcionou. O que resolveu o problema para mim foi simplesmente construir a solução. Eu sei que isso pode parecer idiota, mas não é óbvio que é necessário; Não vi nenhum documento oficial mencionar esta etapa.
user1807768
6
Eu tive o mesmo problema no VS2015. # 2 corrigiu o problema para mim.
Mcolegro # /
2
Não faço ideia por que as pessoas pagam tanto dinheiro por um produto que falha com tanta frequência. Eu tive que atualizar meu projeto para 2015 e fazer # 3 2 vezes antes de descobrir meu teste.
Matthew Hoggan
81

Se você estiver usando o NUnit, baixe o NUnit Adapter primeiro.

Vá para Ferramentas → Extensões e atualizações… → Online → procure por "NUnit Test Adapter".

Farukh
fonte
2
Estou usando os UnitTests da Microsoft. Nesse caso, suponho que não seja necessário instalar nada.
miguelbgouveia
1
Isso fez por mim - muito obrigado.
Matas Vaitkevicius
Isso consertou para mim. Obrigado.
precisa saber é o seguinte
Votado como resolveu o problema, mas é necessário ter o adaptador NUnit ou o Visual Stdio deve funcionar com o NUnit imediatamente.
Owain Glyndŵr
Você é um deus, senhor.
Nox
61

Verifique se a sua classe de teste é publicpara que possa ser encontrada. E se você estiver fazendo referência a outra classe, verifique o mesmo.

Além disso, às vezes, se você não tiver Asserts ou não estiver decorando o teste com a [TestMethod], um teste poderá não ser reconhecido.

Mais duas coisas: 1) Os testes de unidade assíncrona são engraçados na melhor das hipóteses, e nenhum na pior. Dê uma olhada neste artigo de Stephen Cleary e mantenha-o a partir daí, se for do seu interesse.

2) Se você usa o NUnit e se [TestCase]depara com os mesmos problemas, lembre-se de que é para o Nunit, em vez de[TestMethod]

Dito isto, aqui está um artigo que eu publiquei no projeto de código, com os dois MSTest& NUnit, caso você queira dar uma olhada e verifique se não está perdendo nada.

Noctis
fonte
1
Todos os meus testes são assim: [TestClass] public class ServicesUtilsTest {[TestMethod] public void Test1 () {Assert.IsTrue (True); }}
miguelbgouveia
isso não está muito claro. Coloque-o em um bloco de código na sua pergunta, por isso pode ser entendido :)
Noctis
Todos os meus testes são para código de sincronização e acho que meu problema não está no código de testes de unidade, mas mais no visual studio, às vezes, não descobrindo os testes.
Miguelbgouveia
Tente usar isso:using Microsoft.VisualStudio.TestTools.UnitTesting;
Noctis
1
Eu já estou usando o Microsoft.VisualStudio.TestTools.UnitTesting. Este espaço para nome é definido na DLL Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
miguelbgouveia
28

Eu tive o mesmo problema, mas nenhuma das outras soluções funcionou. Acontece que eu estava usando a estrutura do NUnit 3 com o adaptador 2.

Se você estiver usando o NUnit 3, vá para Extensões e atualizações e instale o NUnit3 Test Adapter.

Frank
fonte
Diz isso na descrição do pacote Nuget. Mas se você é como eu e não lê, espero que isso ajude: "Este pacote inclui o assembly da estrutura do NUnit 3.0, que é referenciado por seus testes. Você precisará instalar a versão 3.0 do nunit- programa de console ou um corredor de terceiros que ofereça suporte ao NUnit 3.0 para executar testes. Os corredores destinados ao uso com o NUnit 2.x não executam os testes 3.0 corretamente. "
22415 Frank
No meu caso, eu sabia que tinha algo a ver com a atualização do NUnit3, mas um conjunto do meu teste passou e os outros não foram vistos. Após uma inspeção mais detalhada, houve muitas exceções na saída, apesar de todos os testes terem sido aprovados.
Rich Shealer
Este foi o meu caso também. Eu executei o nuget "update-package" sem perceber que ele era atualizado do NUnit 2.x para 3.x.
Jens
Atualmente, o NUnit 3.0 Test Adapter não pode ser encontrado via NuGet (consulte o Wiki do NUnit 3.0 ). Ainda pode ser instalado como uma extensão.
precisa saber é o seguinte
1
Muito obrigado Frank. Resolveu o meu problema. Agora eu sou capaz de ver os resultados de teste de unidade na janela do console :)
Santosh Kumar patro
12

Estou tendo esse problema de tempos em tempos. O que funciona para mim é desligar o Visual Studio e ir para a pasta:

%LocalAppData%\Microsoft\VisualStudio\12.0\ComponentModelCache

e exclua o conteúdo.

Depois de abrir o Visual Studio e carregar seu projeto novamente, o Gerenciador de Testes deve conter novamente seus testes

Mariusz Gorzoch
fonte
Para mim isso não funciona. Estou usando o Visual Studio 2013 Express com a atualização 5, instalada recentemente. Ainda não há testes de unidade aparecendo.
Miguelbgouveia
Este também foi o trabalho para mim. Até trabalhou sem reiniciar o visual studio. Horas no ralo finalmente chegaram ao fim.
precisa saber é o seguinte
Este diretório não existe mais no VS2017.
quer
Obrigado, funciona para mim para qualquer um desses nesta pasta pode ter uma versão diferente, dependendo da instalação do visual studio, como para mim é%LocalAppData%\Microsoft\VisualStudio\16.0_03b7a93c\ComponentModelCache
Ravi Kumar Mistry
12

Os usuários do XUnit podem perceber que a janela Test Explorer não lista mais nenhum teste. Para tornar os testes detectáveis ​​novamente, tente esta dica importante , destacada abaixo.

Se você estiver com 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).

Digite TEMP para encontrar a pasta de destino

SushiGuy
fonte
Isso não funcionou para mim. O Test Explorer simplesmente não encontra o meu teste e, pelo que sei, não estou fazendo errado e tentei algumas das soluções aqui sem sucesso.
Skychan
Usando MsTestV2 - esta era a única coisa que corrigiu o problema
Nathan
5

Para futuros googlers, tive um cenário raro que causou isso.

Na minha classe de teste base, eu tinha uma propriedade chamada TestContext. Isso interferiu na propriedade TestContext reservada do MSTest, ocultando todos os meus testes do VS / Resharper, exceto um (que não foi herdado da base).

Adam Behrle
fonte
1
me pegou também! Eu esqueci de fazer a propriedade de contexto de teste public.
fuga-llc
4

para mim, estava alterando 'configurações da solução' para Debug (em vez de Release).

zook2005
fonte
4

Meu problema era porque meu método de teste de unidade não era nulo e estava recebendo parâmetros.

alansiqueira27
fonte
De todas as coisas ... Esse era o meu problema e a parte dos parâmetros faz sentido. Afinal, o que o sistema de teste saberia passar? A solução é criar um método de teste no qual você chama manualmente o método que deseja testar. Se você estiver testando um projeto WebAPI e tiver um Get com parâmetros, ainda precisará ter a chamada Get correspondente, mas ela não aparecerá no explorer.
MetalPhoenix
4

Descobri que os métodos de teste de unidade marcados como async voidnão foram descobertos pelo VS Test Explorer. Parece que o VS não teria como esperar que um teste terminasse e decidir se foi ou não bem-sucedido. Se você absolutamente precisar de um método de teste para executar de forma assíncrona, faça com que ele retorne uma tarefa como preferir async Task. Eu descobri que isso corrigia o problema para mim.

cookiemonster
fonte
1
Isso não responde à pergunta acima, mas esse é exatamente o problema que eu estava tentando resolver. Então você teve um acidente +1 :) Muito obrigado!
CF
3

Tente criar todos os projetos como MSIL (qualquer CPU) em vez de x86 / x64. Trabalhou para mim estranhamente

Alfons
fonte
Eu só tinha para construir o projeto de teste usando Qualquer CPU, os outros projectos permaneceu x64
Eduardo Brites
1
Tecnicamente, o C # / VB.NET sempre compila para o MSIL. A configuração do projeto "x86", "x64" ou "Qualquer CPU" (e, nas versões mais recentes, "Preferir 32 bits") são apenas sinalizadores na parte superior do EXE / DLL. Point ainda permanece, no entanto; O NUnit não listará os testes que não podem ser carregados no mecanismo de execução, por serem marcados como exigindo a execução de uma arquitetura específica.
Jonathan Gilbert
3

Enquanto a solução de AndyG funciona, uma solução mais duradoura pode ser definir a variável de ambiente PreferredToolArchitecture como "x64", seja:

Como fazer o Visual Studio usar a cadeia de ferramentas amd64 nativa

ou pela:

  • Painel de controle | Sistema e Segurança | Sistema | Configurações avançadas do sistema | Variáveis ​​de ambiente
  • PreferredToolArchitecture = x64
  • DefaultToolArchitecture = Native64Bit
  • PROCESSOR_ARCHITECTURE = x64
  • ProcessorArchitecture = x64
Kevin Johnsrude
fonte
2

Eu estava enfrentando o mesmo problema e lembrei-me novamente (essa situação aconteceu antes) de que a seleção de "Plataforma mista" no menu da plataforma de soluções funciona, assim como as outras respostas.

Jeferson
fonte
Mas onde está o menu da plataforma de soluções? Isso está no Visual Studio? Estou usando o Visual Studio Express 2013 para Web e não consigo encontrar esse menu.
Miguelbgouveia
2

Eu consegui adicionar o meu como

public static void TestMethod1(){}

começou a trabalhar depois que eu removi a estática ....

Arthur Russell Fox
fonte
2

Vá para o gerenciador de pacotes Nuget e faça o download do Nunit Adapter da seguinte maneira. insira a descrição da imagem aqui

Debendra Dash
fonte
1

vá para o menu do projeto> Configuration Manager, verifique se a plataforma do projeto de teste corresponde ao restante do projeto e marque para compilar e reconstruir.

user5224229
fonte
1
Não tenho nenhuma opção do Gerenciador de Configurações no menu do meu projeto. Só consigo encontrar a opção de propriedades do projeto. Eu sou a plataforma do projeto de testes unitários e é o mesmo dos outros projetos. Então, para mim, essa solução não funciona.
miguelbgouveia
Definir "corresponde ao resto do projeto"
junte
1

Acabei de me deparar com isso, assim como não vi um caso semelhante ao meu.

No .csprojarquivo do meu projeto de teste, a privacidade de referência do NUnit foi configurada para False:

<Reference Include="nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
  <HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
  <Private>False</Private>
</Reference>

Depois que eu definir <Private>a Trueele trabalhou.

Kevin Giszewski
fonte
1

Você só precisa instalar este pacote apenas:

NUnit TestAdapter NUnit TestAdapter

Sandy_Vu
fonte
Eu sabia que o uso de outra estrutura de teste de unidade resolverá meu problema. Mas se eu quisesse continuar usando a estrutura Microsoft Unit Tests, essa não é uma solução.
miguelbgouveia
1

Eu tive o mesmo problema.

Isso ocorreu devido à versão incompatível do NUnit que eu adicionei ao meu projeto (3.2.0) e ao Adaptador de Teste que eu tinha instalado (2.0.0).

Para corrigir, use "Ferramentas> Extensões e atualizações" e procure o NUnit3 Test Adapter, ele descobriu meus testes depois disso.

Felicidades

Francis Smith
fonte
Não estou usando o NUnit.
22716 Miguelbgouveia
1

Digamos apenas por razões de argumento que você precisa usar a arquitetura X64 em seu projeto de teste para que as dependências sejam construídas corretamente (como no meu caso). Pode ser necessário modificar sua Arquitetura de processador padrão no menu Teste - Configurações de teste . Definir isso como X64 permitiu ao meu test explorer encontrar meus testes usando o Microsoft.VisualStudio.TestTools.UnitTesting.

Dominic Hartjes
fonte
1

Desculpe por adicionar à lista longa, mas tive um problema completamente diferente. Primeiro, gostaria de mencionar que descobri o meu problema ao clicar em 'Executar tudo' no Test Explorer e depois assistir à janela de saída da compilação no Visual Studio. Você precisa assistir ativamente, pois depois a mensagem desaparece.

Quanto ao problema, parece que durante a verificação dos testes, a DLL é carregada e seus tipos de testes são enumerados. Isso faz com que as referências sejam carregadas e, se ocorrer alguma falha durante esse processo, os testes não serão mostrados no explorador. Tive dois problemas para impedir que a DLL de teste fosse carregada com êxito:

  • Ainda havia um redirecionamento de ligação no arquivo de configuração (redirecionando para uma versão inferior NHiberate do que o que foi referenciado no projeto de teste).
  • Uma referência de montagem conflitante (as referências de segundo nível não podem ser carregadas). O AsmSpy é uma ótima ferramenta para procurar por eles.
Martijn Evens
fonte
Eu estava enfrentando o mesmo problema, tinha dificuldade em encontrar qual DLLs não estavam carregando ....
Amarnath chatterjee
1

Se você carregar uma solução do Visual Studio (Comunidade VS 2015 no meu caso) de um compartilhamento de rede ou diretório Meus Documentos que faz parte de um compartilhamento , você encontrará esse problema. Eu o resolvi movendo a solução e seus projetos subjacentes para uma pasta local.

Ton Snoei
fonte
1

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
0

Me deparei com o mesmo problema. E investigou e descobriu que as DLLs não foram construídas e colocadas na pasta correta. assim que mudei minha configuração, eles apareceram. - as opções de criação de projetos, qual pasta deve ser usada? - a entrada do menu de compilação configuração de compilação, eles devem ser verificados.

isso consertou para mim.

kfn
fonte
Para mim, as DLLs para os testes também não foram criadas porque o visual studio não encontra nenhum teste definido. Estou usando o Visual Studio Express e não tenho a entrada de menu Build. Mas no meu gerenciador de configuração, tenho todas as opções de compilação verificadas. Então, acho que esse não é o problema para o meu caso.
miguelbgouveia
@miguelbgouveia, é o contrário - o VS constrói DLLs e depois verifica os testes. Portanto, se você não possui DLLs de projeto de teste, definitivamente não encontrará testes.
0

Para o Visual Studio 2013.5, limpar o diretório \ TestResults na solução ajudou. O Visual Studio corrompeu o arquivo mdf no qual armazena os testes descobertos, impedindo a descoberta de testes de unidade.

MartijnK
fonte
1
Está na solução do seu projeto. Clique com o botão direito do mouse no arquivo do projeto no Solution Explorer -> Open Folder no File Explorer. Vá um diretório para cima e exclua o diretório / TestResults. Talvez você precise desligar o Visual Studio para excluir tudo. Ele reconstruirá o diretório na próxima vez que o projeto for aberto.
MartijnK 23/09/16
0

Verifique se todos os seus projetos estão em execução com a mesma configuração. Nas propriedades do seu projeto => Debug => Plataforma na lista suspensa, escolha a plataforma apropriada (para mim era "Qualquer CPU") conforme determinado em seus outros projetos.

Roni
fonte
0
  • Sei que os testes de unidade não são encontrados se a solução não for criada, o que é algo a ser tentado (Compilar a solução), mas essa solução é como o suporte técnico perguntando se o computador está conectado ...
  • Depois que uma reconstrução limpa não solucionou o problema para mim, a execução de uma compilação em lote completo corrigiu.
amalgamar
fonte
0

Teve o mesmo problema; testes de repente deixaram de ser descobertos.

O Adaptador de teste da unidade havia sido desativado de alguma forma. Clicar em ativar no gerenciador de extensões o corrigiu para mim.

HeatherD
fonte
0

Eu tive o mesmo problema até perceber que cometi um erro de recortar / colar e parei [Test Method]antes do teste.

forforf
fonte
Isso já aconteceu comigo. Mas neles, esse não é o caso.
Miguelbgouveia 01/03