Visual Studio 2015 o 2017 non rileva i test unitari


165

EDIT 2016-10-19:

La domanda originale riguardava un problema specifico di VS2015 CTP6 con il test runner XUnit. Dalle risposte emerge che esiste un problema molto più ampio con il rilevamento di unit test in Visual Studio che può verificarsi in diverse situazioni. Ho ripulito la mia domanda per riflettere ciò.

Ho anche incluso uno script nella mia risposta che uso ancora oggi per risolvere problemi simili quando compaiono.

Molte altre risposte si sono dimostrate utili anche per comprendere meglio la complessità del test runner VS. Apprezzo che le persone condividano ancora le loro soluzioni!


Domanda originale 2015-04-10:

Da ieri, Visual Studio Test Explorer non rileverà i test per nessuno dei miei progetti. Non mostra nemmeno la barra di caricamento verde dopo la costruzione.

Quando vado in Visual Studio Test Explorer e faccio clic su "Esegui tutto" o quando faccio clic con il pulsante destro del mouse su qualsiasi metodo di prova e seleziono "Esegui test", nella finestra di output ottengo quanto segue:

Could not load file or assembly 'Microsoft.VisualStudio.Web.ProjectSystem, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

Sono in esecuzione di Visual Studio 2015 CTP 6 su Windows 10 Pro Technical Preview, accumulo 10041. La versione .NET Framework non sembra avere importanza - succede su 4.0, 4.5.2e 4.6.

Ho provato con i seguenti framework di test e tutti danno lo stesso comportamento:

  • Microsoft.VisualStudio.QualityTools.UnitTestFramework v14.0.22609.0
  • xunit v2.1.0-beta1-build2945 con xunit.runner.visualstudio v2.1.0-beta1-build1051
  • NUnit v2.6.4 con NUnitTestAdapter v2.0.0

Ho riscontrato un problema su GitHub (xunit) che sembrava essere simile: Impossibile ottenere i test scoperti # 295 , con questo commento dal team di xunit:

Tieni presente che Visual Studio 2015 CTP 5 è stato segnalato per essere rotto da molte persone con unit test in generale (non solo xUnit.net), quindi non aspettarti che funzioni.

Inoltre, assicurati di aver ripulito la cache del corridore di Visual Studio. Se viene danneggiato, Visual Studio si comporta in modo permanente fino a quando non viene eliminato. Per cancellare la cache, chiudere tutte le istanze di Visual Studio, quindi eliminare la cartella% TEMP% \ VisualStudioTestExplorerExtensions (onestamente, probabilmente non farebbe male eliminare tutto in% TEMP% che può essere eliminato).

Ho provato il loro suggerimento per eliminare la cartella %TEMP%\VisualStudioTestExplorerExtensions. Purtroppo questo non ha risolto il problema.

Ho notato che ReSharper è effettivamente in grado di scoprire alcuni test. Funziona solo per i test VS e NUnit, non per xunit.

Ci deve essere una sorta di cartella temporanea o cache che devo cancellare, ma so che Visual Studio ne ha molti e non tutti possono essere eliminati senza effetti collaterali indesiderati.


3
Sono così felice di essermi imbattuto in questo, mi ricorda perché sto usando un test runner di terze parti (nel mio caso ncrunch). Ho rinunciato molto tempo fa per ragioni simili. Certo, questa non è una soluzione se sei bloccato con mstest ...
Abel


con VS 2017, incredibilmente, una pulizia delle mie cartelle relative a temp e localappdata VS2017, una soluzione di chiusura + ricarica + pulizia e un riavvio di Windows non mi hanno aiutato. Tuttavia, sorprendentemente, un semplice progetto "scarica - ricarica" ​​solo su uno dei miei progetti di test ha aiutato la scoperta del test a smettere di bloccarsi. Non utilizzo un pacchetto di test di unità di terze parti.
Pac0

Per alcuni ppl questo potrebbe essere interessante o più rilevante (non credo che dovrei aggiungerlo come risposta): Nessuna fonte disponibile in Test Explorer - github.com/Microsoft/testfx/issues/274
hB0

Questa potrebbe essere una correzione per qualcuno stackoverflow.com/a/58019304/1566372
Rady

Risposte:


154

Con mia sorpresa, la cancellazione dei file temporanei nella %TEMP%directory ha risolto il problema per me.

Nota: questo percorso è generalmente a C:\Users\(yourusername)\AppData\Local\Temp

Con @ Warren-P incluso, puoi navigare nella cartella temporanea inserendo il %temp%menu Start o lanciando "Esplora file" e inserendo %temp%la barra degli indirizzi.


30
Oppure digiti semplicemente nel %TEMP%menu Start Esegui e trova la tua cartella temporanea per te senza indovinare quale sia il valore di temp.
Warren P

65
@ ZéCarlos Qualsiasi applicazione che memorizza dati importanti nella %TEMP%directory merita di smettere di funzionare.
Mark Pattison,

25
non è un imbarazzo per te, è un totale fallimento da parte di Microsoft che devi prendere misure così ridicole per mantenere in esecuzione un IDE di oltre 1000 USD.
MushyPeas,

8
Ha funzionato anche per me in VS2017!
Lorentz Vedeler,

6
Se sei preoccupato di cancellare l'intera directory temporanea, solo la cancellazione della sottodirectory Temp \ VisualStudioTestExplorerExtensions sembra risolvere il problema.
Mike Walsh,

90

È possibile che il codice sia compilato con x64, pertanto è necessario abilitare l'architettura del processore predefinita come X64.

Test > Test Settings > Default Processor Architecture > X64

3
Questo mi ha morso alcune volte. Anche dopo tutti questi anni non riesco ancora a pensare a una buona ragione per cui, per impostazione predefinita, le impostazioni del test non sono selezionate per corrispondere automaticamente alla configurazione di build corrente del progetto. Mi sembra una configurazione duplicata inutile.
Neutrino,

1
Windows Update e / o VS update cambiano l'architettura predefinita senza dirti .... aaargh
rupweb

E 4 anni dopo, questo è ancora utile. Grazie
Oscar O.

67
  • Dai un'occhiata, se NUnit Test Adapter 2/3 è installato in VisualStudio.
    (Tools>Extensions and Updates )

  • Assicurarsi che sia stata scelta l'architettura del processore corretta:
    (Test>Test Settings>Default Processor Architecture)


2
Questo è ciò che alla fine ha funzionato per me. Dopo aver provato tutto il resto.
BradStell,

Ti fa sentire uno sciocco a scavare prima nelle cartelle temporanee quando l'estensione non è nemmeno installata. Grazie per aver pubblicato questo
NightOwl888

2
Controlla anche se usi l'estensione corretta. Ce n'è uno separato per NUnit 2.xe NUnit 3.x.
pmbanka,

1
Quando scegli come target .NET Standard, devi effettivamente installare il pacchetto NuGet NUnit Test Adapter anziché un'estensione VSIX. github.com/nunit/docs/wiki/.NET-Core-and-.NET-Standard
m93a

Prova a ottenere NUnit3TestAdapter da Nuget, anziché VSIX. È l'approccio migliore
Ravella,

33

EDIT 2016-10-19 (script di PowerShell)

Questo problema ritorna ancora ogni tanto. Ho scritto un piccolo frammento di PowerShell per automatizzare la cancellazione della cartella / dei file cache / temp rilevanti per me. Lo sto condividendo qui per i futuri lettori:

@(
"$env:TEMP"
"$env:LOCALAPPDATA\Microsoft\UnitTest"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\1033\SpecificFolderCache.xml"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\1033\ProjectTemplateMRU.xml"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\ComponentModelCache"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\Designer\ShadowCache"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\ImageLibrary\cache"
"$env:LOCALAPPDATA\Microsoft\VisualStudio Services\6.0\Cache"
"$env:LOCALAPPDATA\Microsoft\WebsiteCache"
"$env:LOCALAPPDATA\NuGet\Cache"
) |% { Remove-Item -Path $_ -Recurse -Force }

Assicurati di chiudere Visual Studio in anticipo ed è probabilmente una buona idea riavviare in seguito.

L'eliminazione della cartella TEMP potrebbe non essere necessaria e in alcuni casi potrebbe anche essere indesiderabile, quindi consiglierei di provare senza cancellare prima la cartella TEMP. Ometti solo il"$env:TEMP" .

Risposta originale 12-04-2015

Il problema è stato "risolto" dopo un'accurata pulizia delle cartelle temp / cache relative a Visual Studio.

Dal momento che non ho avuto il tempo di esaminare tutto uno per uno e poi provare nel mezzo, purtroppo non so quale sia stato effettivamente il problema.

Questi sono i passi esatti che ho preso:

  1. Visual Studio chiuso
  2. Utilizzato CCleaner per cancellare il sistema e il browser temp file / le cartelle del
  3. Cancellare / eliminare manualmente i seguenti file / cartelle:

    • %USERPROFILE%\AppData\Local\assembly
    • %USERPROFILE%\AppData\Local\Microsoft\UnitTest
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\1033\SpecificFolderCache.xml
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\1033\ProjectTemplateMRU.xml
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\Designer\ShadowCache
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\ImageLibrary\cache
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio Services\6.0\Cache
    • %USERPROFILE%\AppData\Local\Microsoft\WebsiteCache
    • %USERPROFILE%\AppData\Local\NuGet\Cache
    • %USERPROFILE%\AppData\Local\Temp

Grazie, ha funzionato per me dopo aver cancellato le cartelle Microsoft \ VisualStudio \ 14.0 \ e Microsoft \ VisualStudio Services \ 6.0 \ Cache che descrivi.
Niels van Reijmersdal,

Sicuramente intendi \Microsoft\VisualStudio\14.0\ImageLibrary\ImageLibrary.cache?
Mateen Ulhaq

2
Ho rimosso tutto da% TEMP% e non funziona, ma quando ho letto la directory 'VisualStudioTestExplorerExtensions' (vuota) tutto funziona perfettamente :-) (Al giorno d'oggi c'è una risposta con quella soluzione in fondo)
nilphilus

Voglio confermare che questa soluzione funziona per me con VS2015 Update 3 e Resharper 10. Ma è necessario riavviare per vedere il miracolo
Quoc Nguyen

1
Ho cancellato solo un file \ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ 1033 \ SpecificFolderCache.xml epls
Serhii Kuzmychov

21

Uno dei motivi di questo problema è che la classe di test non è pubblica. MSTest scopre solo i test delle classi pubbliche.


1
Anche se questo non è corretto al 100% e avevo una classe non pubblica che funzionava bene, ad un certo punto il suo test unitario ha smesso di funzionare. Quando ho cambiato la classe di unit test in pubblica, ha ripreso a funzionare. Vai a capire!
SashaArz,

Questo mi ha risolto. Per impostazione predefinita, Visual Studio aggiunge classi di test senza la parola chiave pubblica e non le vedrebbe fino a quando non le renderò pubbliche.
Marc Fearby,

13

In Visual Studio 2015 (Aggiornamento 3) se si desidera collegare i test in Esplora risorse, è necessario installare l' adattatore di test NUnit. Scaricare l'adattatore da Strumenti-> Estensione e aggiornamenti-> scheda Online (è necessario cercare l'adattatore ) -> Scarica . Riavviando Visual Studio è possibile visualizzare la modifica per il framework di test.


2
Seguendo le tue istruzioni, ho cercato "nunit" e ho trovato "NUnit 3 Test Adapter" che, dopo "Download" (installa), ha risolto il mio problema. La ricerca su Internet di questo problema trova altri articoli SO al link
Adam Cox,

Questo è meglio del gestore pacchetti Nuget in alcuni scenari in quanto non modifica i file di configurazione
GY_

1
@GY_ ma quando si è rivolti ad .NET Core o standard, è effettivamente necessario il pacchetto NuGet, controllare la mia risposta in basso: stackoverflow.com/a/47460221/1137334
m93a

Mi salvi la vita! Grazie, ho provato tante soluzioni e non ha funzionato. Il mio era un adattatore di prova di Google.
Erman,

9

Non ho una risposta completa a questo, ma ho determinato alcune cose giocando con un progetto di test:

  1. Quello xunit.runner.aspnet : 2.0.0-aspnet-beta4che sembra essere parte della versione ufficiale di beta4 aspnet5 non funziona in Visual Studio.
  2. Invece, l'utilizzo "xunit": "2.1.0-*"e i "xunit-runner.dnx": "2.1.0-*"pacchetti funzionano in Visual Studio.
  3. Affinché VS possa scoprire i test, il tuo progetto DEVE avere un SINGOLO comando chiamato "test" che esegue "xunit.runner.dnx". L'aggiunta di comandi aggiuntivi potrebbe interromperlo.
  4. Se la finestra di Esplora test finisce ancora vuota, RIMUOVI il comando "test" dal tuo progetto, quindi ricostruisci la soluzione, quindi aggiungi il comando "test" a project.json.
  5. Svuotare tutte le cache come suggerito da @ Fred-Kleuver può essere d'aiuto, ma non ho fatto tutti i passaggi in modo isolato, quindi non ne sono sicuro.

Questo è attuale secondo VS 2015 CTP 6, usando le versioni beta4, non i quotidiani.


1
Va bene, ho confermato (facendo provare a un collega) che la correzione di cui sopra non richiede la cancellazione delle cache o dei file temporanei.
Avi Cherry,

Sopra dice "Invece, usando" xunit ":" 2.1.0- "e" xunit-runner.dnx ": i pacchetti " 2.1.0- "funzionano in Visual Studio.". Questo funziona, grazie!
Gillardo,

A proposito, come seguito, tutto sembra funzionare bene ora in VS 2015 a partire dalle versioni attuali. Non è necessario agitarsi per ottenere nuovi test da mostrare o altro.
Avi Cherry,

1
Infine, esiste ora una guida corretta di MS su quali versioni di xunit usare con quali versioni di DNX, qui: xunit.github.io/docs/getting-started-dnx.html
Avi Cherry,

9

Ho avuto un'istanza in cui alcuni test non sarebbero stati raccolti perché li avevo fatti asynccome i seguenti:

public async void This_IsMy_UnitTest()

Il problema era che avevo dimenticato di farli tornare a Taske novoid quando ho fatto il passaggio. Si potrebbe pensare che ciò provocherebbe un errore o un test fallito ma no. I test unitari in quella classe furono completamente ignorati e si comportarono come se non esistessero.

Non è stato dopo circa 3 clean e build + riavvio VS.NETche ho visto il test eseguito e fallito indicando che ho dimenticato di aggiungere il Tasktipo restituito:

public async Task This_IsMy_UnitTest()

Dopo l'aggiornamento, i test unitari sono stati trovati e hanno funzionato correttamente. Questo potrebbe essere un caso limite, ma avere asynctest per l'utilizzo awaitall'interno ma non avere la firma corretta può causare lo stesso problema e non è la prima volta che lo faccio.


Risolto il problema per me!
Aimal Khan,

8

Vai a Nuget Package Manager e scarica Nunit Adapter come segue.

inserisci qui la descrizione dell'immagine


Grazie, nel mio caso avevo NUnitTestAdapter invece di NUnit3TestAdapter. Ciò ha risolto il mio problema.
pixel,

L'aggiunta del pacchetto nuget NUnit3TestAdapter a una soluzione oa un progetto non risolverebbe il problema per tutte le altre soluzioni in generale, ma solo per quelle a cui è stato aggiunto. Per farlo generalmente per tutte le soluzioni / i proj, aggiungi l'estensione NUnit 3 Test Adapter al tuo studio visivo come spiegato su stackoverflow.com/a/45748818/1300390
Umar T.

6

Avevo lo stesso pronlem ma la cartella "% TEMP% \ VisualStudioTestExplorerExtensions" non esisteva sulla mia macchina, quindi mentre leggevo i post ho avuto l'idea di crearla e funziona. L'esploratore di test ora è in grado di mostrare tutti i miei test. Grazie.


6

Basta riavviare Visual Studio e in Test Explorer eseguire "Esegui tutto" ... Tutti i miei test vengono scoperti quindi.


1
Ho notato anche chiudere Test Explorer, riaprirlo e anche scegliere Esegui tutto. Non sono ancora sicuro che funzioni sempre ma questa volta ha funzionato.
Ricco

5

Nel mio caso (Visual Studio Enterprise 2015 14.0.25425.01 Update 3, Resharper 2016.2) avevo solo bisogno di fare una soluzione pulita dal menu Genera. Ricostruendo la soluzione, il test explorer si "sveglia" e trova di nuovo tutti i test.


5

Nel mio caso, la soluzione era installare l' estensione dell'adattatore di test NUnit 3 su Visual Studio 2015.

"Estensioni e aggiornamenti" è presente nella sezione "Strumenti"


In che modo la tua risposta aggiunge valore alla domanda? Li hai letti? Esistono già due risposte che raccomandano la stessa identica soluzione: stackoverflow.com/a/41364951/6305294 , stackoverflow.com/a/35043380/6305294
Alex

2
Bene, ho letto il primo (cioè stackoverflow.com/a/41364951/6305294) ma questo è diverso dalla mia risposta in quanto suggerisce di aggiungere il pacchetto nuget NUnit Adapter a una soluzione o a un progetto, che non risolveva il problema problema per tutte le altre soluzioni in generale. Per quanto riguarda il secondo, devo ammettere che mi mancava di vederlo. Forse l'aggiunta di uno screenshot aiuta a catturare l'attenzione quando sono presenti due molte risposte a una domanda
Umar

4

Nel mio caso, il problema era "tra la sedia e la tastiera". Ero passato a una configurazione in Configuration Manager che non includeva i miei progetti di test unit su build. Il passaggio a una configurazione (ad es. Debug) che include tutti i progetti ha risolto il problema.


4

Nel mio caso, MSTest sotto VS 2015 stava ignorando i test con nomi di test (ovvero metodo) che erano più lunghi di 174 caratteri. Accorciare il nome ha reso visibile il test. Ciò è stato determinato tramite indovinare e controllare manipolando il nome del test.


4

Questo probabilmente non aiuterà la maggior parte delle persone, ma qualcuno inesperto al test unitario aveva scritto un metodo di test che restituiva boolinvece di void:

[TestMethod]
public bool TestSomething()

Modifica del tipo restituito per voidrisolvere il problema.


Ancora interessante sapere che la restituzione di un tipo impedisce la scoperta del test, non lo sapevo.
Fred Kleuver,

3

Assicurati di averlo xunit.runner.visualstudio pacchetto nel tuo progetto di prova package.config e che sia stato ripristinato correttamente.

So che questo non era il caso della domanda originale, tuttavia potrebbe risparmiare tempo per qualcuno come me.


3

Vorrei solo aggiungere che ho trovato una soluzione completamente diversa da quelle sopra.

Avevo dichiarato la mia classe di test come di seguito:

[TestClass]
class ClassificationTests
{
   //unit tests
}

Non appena ho aggiunto il publicmodificatore alla classe, ha funzionato come previsto!


2

Se scegli come target .NET Standard o .NET Core, devi utilizzare il pacchetto NuGet per NUnit Test Adapter e non l'estensione .

Si consiglia di installare l'adattatore da NuGet se si stanno testando progetti .NET Core o .NET Standard. L'adattatore VSIX non supporta e non supporterà .NET Core poiché i pacchetti VSIX non possono targetizzare più piattaforme.

Fonte: NUnit GitHub Wiki

.

Controlla anche le FAQ qui:

I miei test non vengono visualizzati in Visual Studio 2017?

  • Stai usando il pacchetto NuGet?
  • Stai utilizzando la versione 3.8.0 o più recente del pacchetto NuGet?
  • I tuoi test hanno come obiettivo .NET Core o .NET Framework completo? (vedi sopra)
  • Hai aggiunto un riferimento al pacchetto a Microsoft.NET.Test.Sdk?
  • Hai riavviato Visual Studio? È ancora un po 'temperato.

Fonte: NUnit GitHub Wiki



1

Ho avuto lo stesso problema. Ho appena ripulito e ricostruito il progetto e sono stato in grado di vedere i test mancanti.


1

Fare una pausa per condividere la mia soluzione. Ero su Windows 10, Visual Studio 2015, NUnit 3.5, NUnit Test Adapter 3.6 (tramite NuGet, non l'estensione VISX) e nessuno dei miei test era stato scoperto. Il mio problema era che nel progetto Test della mia soluzione, in qualche modo era stato creato un collegamento alla mia cartella "Documenti" all'interno della cartella del progetto. Immagino che l'adattatore di test stia vedendo il collegamento e che si riagganci cercando di capire cosa farne, causando l'incapacità di visualizzare i test delle unità.


1

L'eliminazione del file \ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ 1033 \ SpecificFold‌ erCache.xml ha risolto il problema per me.


1

Questo argomento è in qualche modo obsoleto, ma la mia soluzione allo stato Test mancante in VS2015:

Lo stato dell'attività viene visualizzato solo nella configurazione build di Debug. Naturalmente questo rende anche impossibile eseguire il debug del test tramite il test-explorer.


1

Sono stato anche morso da questa meravigliosa piccola funzionalità e nulla di ciò che è stato descritto ha funzionato per me. Non è stato fino a quando ho ricontrollato l'output di generazione e ho notato che i progetti pertinenti non venivano creati. Una visita al responsabile della configurazione ha confermato i miei sospetti.

Visual Studio 2015 mi ha permesso felicemente di aggiungere nuovi progetti, ma ha deciso che non valeva la pena costruirli. Una volta aggiunti i progetti alla build, ha iniziato a funzionare bene.


1

L'ho risolto cambiando X64 in: Fare clic con il tasto destro sul progetto -> Proprietà -> Costruisci -> Destinazione piattaforma -> Qualsiasi CPU


1

In qualche modo il mio progetto doveva essere compilato come una libreria statica (.lib) . Dopo averlo modificato in una Libreria dinamica (.dll) , i test sono stati rilevati correttamente da Visual Studio 2012.

My Unit Test Project ->
Properties ->
Configuration Properties ->
General ->
Configuration Type

1

È stato così facile per me risolvere il problema come:

  • Seleziona il tuo progetto di unit test
  • Fare clic sul pulsante "Mostra tutti i file" in Esplora soluzioni e i nuovi file temporanei sono stati visualizzati nella struttura dei file di Esplora soluzioni in "obj \ x86 \ Debug".
  • Elimina questi file temporanei e ricostruisci il progetto.
  • Ho provato a eseguire i test e ha funzionato !.

1

Abbiamo avuto lo stesso problema. Abbiamo una grande soluzione VS 2015 con più progetti C # e ancora più progetti di test.

La scoperta del test di Resharper ha funzionato bene, ma VS Test Explorer ha fallito miseramente.

Si scopre che i progetti non avevano la stessa versione di MsTest TestFramework e TestAdapter e che a volte usavano NuGet e altre volte buoni riferimenti vecchi e che apparentemente non era supportato (tanto per un IDE così costoso).

La rimozione di tutti i riferimenti Microsoft.VisualStudio.Test * e l' aggiunta / aggiornamento dei due NuGet MSTest hanno risolto il problema.


1

Ho risolto questo problema rendendomi conto che il Target Framework per il mio progetto di test era diverso dal progetto in prova. Sì, ho causato questo problema modificando il framework di destinazione da quello predefinito (Progetto> Proprietà> Applicazione), ma non ci sono riuscito per questo progetto di test, che è stato creato diverse settimane dopo. La mancata corrispondenza non ha causato un errore del compilatore, ma ha provocato un avviso nella finestra Elenco errori . Dopo aver selezionato l'opzione per visualizzare gli avvisi, la soluzione era ovvia.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.