Visual Studio 2013 non rileva i test unitari


146

Ho una soluzione semplice in Visual Studio 2013 che è composta da un progetto web, un progetto di biblioteca e un progetto di test unitario. Quando apro la soluzione e provo a eseguire i test unitari, questi non vengono scoperti da Visual Studio. Per eseguire i test, provo ad accedere al menu e scegliere Test -> Esegui -> Esegui tutti i test o aprendo la finestra Esplora test. Da quelli ai metodi visual studio non scopre alcun test nella soluzione.

Crea prima un semplice progetto di unit test e prova a eseguire il test, Visual Studio sa scoprire il test e posso eseguirlo. Quindi, se apro la mia soluzione precedente, Visual Studio ora scopre tutti i test. Provo a salvare la mia soluzione ma chiudendola e riaprendola, senza creare prima un progetto unit test, Visual Studio non trova più i test. È un comportamento molto strano che non so perché stia succedendo.

Lavoravo da solo in questo progetto che utilizzava il controllo del codice sorgente integrato con la fondazione del team di Visual Studio. Il problema di Visual Studio non scopre che i test unitari iniziano quando un nuovo elemento è arrivato al progetto e quando devo ricreare la soluzione tramite il controllo del codice sorgente online. Prima di questo, tutti i test sono stati sempre scoperti da Visual Studio.

Per la creazione dei test unitari uso la dll Microsoft.VisualStudio.QualityTools.UnitTestFramework. La mia versione di Visual Studio è: Microsoft Visual Studio Express 2013 per Web Versione 12.0.30723.00 Aggiornamento 3. La mia versione di .net framework è 4.5.50938.

Tutti i miei test sono così:

[TestClass] 
public class Service1Test 
{ 
    [TestMethod] 
    public void Test1() 
    {
        Assert.IsTrue(True); 
    } 
}

2
Questi test unitari sono basati su Async?
Jamie Keeling,

Non sono sicuro di quale fosse il problema, ma l'esecuzione come amministratore ha risolto il problema per me.
Sriram Sakthivel,

Tutti i test unitari basati sulla sincronizzazione
miguelbgouveia,

2
Hai provato un test-runner esterno (come ReSharpers o NCrunch)? Forse la tua installazione è difettosa (quindi reinstalla VS)
Carsten,

1
Nessuno di questi ha risolto il problema per me :( Che disastro. Ho rinunciato a NUnit e sto facendo affidamento su UnitTestFramework - stranamente il problema opposto rispetto all'OP
Adam,

Risposte:


210

Alcune cose che ho notato che devo fare di tanto in tanto per fare in modo che i test vengano visualizzati correttamente.

  1. Se la soluzione si trova in un'unità protetta di cui è necessario l'accesso come amministratore per leggere / scrivere, a volte viene visualizzata solo una parte dei test. Sicuramente esegui VS come amministratore in quel caso.

  2. Se la soluzione è a 64 bit, assicurarsi che Test> Impostazioni test> Architettura processore predefinita sia impostato su x64. A volte viene impostato su x86. Impostalo su x64, quindi ricostruiscilo.

  3. A volte il semplice riavvio di Visual Studio fa il trucco perché il test explorer si riavvierà nuovamente.

  4. Non dimenticare di creare effettivamente il progetto / la soluzione di test. (Se si desidera che venga creato con il resto dei progetti, fare clic con il tasto destro del mouse sulla soluzione> Proprietà> Proprietà di configurazione> Configurazione> selezionare la casella "Crea" per il progetto di prova)

  5. Assicurarsi che i test siano in una publicsezione della classe di test


34
Mi rendo conto che questa risposta è un po 'in ritardo, ma la mia ricerca su Google mi ha portato qui e nulla di menzionato ha risolto il mio problema. Alla fine ho capito che era il numero 2 nella mia lista, quindi volevo lasciare quella conoscenza, oltre agli altri trucchi che ho raccolto nel tempo.
AndyG,

7
Una combinazione di n. 2 e n. 3 l'ha fatto per me. Visual Studio si è lamentato del fatto che un certo numero di progetti (non di prova) nella mia soluzione fossero esclusi dal passaggio di individuazione del test perché erano stati creati per x86, ma andava bene.
Nate Barbettini,

4
Ho scoperto che le mie impostazioni erano tutte corrette e il riavvio non funzionava. Ciò che ha risolto il problema per me è stata semplicemente la costruzione della soluzione. So che questo può sembrare stupido ma non è ovvio che sia necessario; Non ho visto nessuno dei documenti ufficiali menzionare questo passaggio.
user1807768

6
Ho avuto lo stesso problema in VS2015. # 2 risolto il problema per me.
mcolegro,

2
Non ho idea del perché le persone paghino così tanti soldi per un prodotto che fallisce così spesso. Ho dovuto aggiornare il mio progetto al 2015 e fare # 3 2 volte prima di scoprire il mio test.
Matthew Hoggan,

81

Se si utilizza NUnit, assicurarsi di scaricare prima NUnit Adapter.

Vai su Strumenti → Estensioni e aggiornamenti ... → Online → cerca "NUnit Test Adapter".


2
Sto usando UnitTests di Microsoft. In questo caso suppongo che non sia necessario installare nulla.
miguelbgouveia,

1
Questo l'ha fatto per me - molto obbligato.
Matas Vaitkevicius,

Ciò ha risolto il problema per me. Grazie.
jjthebig1,

È stato valutato come risolto il problema, ma è necessario disporre dell'adattatore NUnit o Visual Stdio dovrebbe funzionare con NUnit.
Owain Glyndŵr,

Sei un dio signore.
Nox,

61

Assicurati che la tua classe di test sia publictale da poter essere trovata. E se fai riferimento a un'altra classe, assicurati della stessa cosa.

Inoltre, a volte se non hai Assert o non stai decorando il test con un [TestMethod], un test potrebbe non essere riconosciuto.

Altre 2 cose: 1) I test unitari asincroni si comportano nel migliore dei casi e niente nella peggiore. Dai un'occhiata a questo articolo di Stephen Cleary e continua da lì se ti interessa.

2) Se usi NUnit e [TestCase]riscontri gli stessi problemi, tieni presente che è per Nunit, invece di[TestMethod]

Detto quanto sopra, ecco un articolo che ho pubblicato sul progetto del codice, con entrambi MSTeste NUnit, nel caso in cui tu voglia fare un giro e assicurarti di non perdere nulla.


1
Tutti i miei test sono così: [TestClass] public class ServicesUtilsTest {[TestMethod] public void Test1 () {Assert.IsTrue (True); }}
miguelbgouveia,

questo non è molto chiaro. Inseriscilo in un blocco di codice nella tua domanda, in modo che possa essere compreso :)
Noctis

Tutti i miei test sono per il codice di sincronizzazione e penso che il mio problema non sia nel codice dei test unitari, ma più in Visual Studio a volte non scoprendo i test.
miguelbgouveia,

Prova invece ad usare questo:using Microsoft.VisualStudio.TestTools.UnitTesting;
Noctis

1
Sto già utilizzando Microsoft.VisualStudio.TestTools.UnitTesting. Questo spazio dei nomi è definito nella dll Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
miguelbgouveia

28

Ho avuto lo stesso problema ma nessuna delle altre soluzioni ha funzionato. Risulta che stavo usando il framework NUnit 3 con l'adattatore 2.

Se si utilizza NUnit 3, andare su Estensioni e aggiornamenti e installare l'adattatore di test NUnit3.


Lo dice nella descrizione del pacchetto Nuget. Ma se sei come me e non leggi, spero che questo possa aiutare: "Questo pacchetto include l'assemblaggio del framework NUnit 3.0, a cui fa riferimento il tuo test. Dovrai installare la versione 3.0 di nunit- programma di console o un corridore di terze parti che supporta NUnit 3.0 per eseguire i test. I corridori destinati all'uso con NUnit 2.x non eseguiranno correttamente i test 3.0. "
Frank,

Nel mio caso sapevo che aveva a che fare con l'aggiornamento di NUnit3, ma una serie del mio test è stata superata e le altre non sono state viste. A un esame più attento, ci sono state molte eccezioni nell'output, anche se tutti i test sono stati superati.
Rich Shealer,

Questo è stato il caso anche per me. Avevo eseguito nuget "update-package" senza rendermene conto aggiornato da NUnit 2.xa 3.x.
Jens,

Attualmente non è possibile trovare l'adattatore di test NUnit 3.0 tramite NuGet (consultare il Wiki di NUnit 3.0 ). Tuttavia, può essere installato come estensione.
vauhochzett,

1
Grazie mille Frank. Ha risolto il mio problema. Ora sono in grado di vedere i risultati del test unitario nella finestra della console :)
santosh kumar patro

12

Di tanto in tanto ho questo problema. Quello che funziona per me è chiudere Visual Studio e andare alla cartella:

%LocalAppData%\Microsoft\VisualStudio\12.0\ComponentModelCache

ed eliminalo contenuto.

Una volta aperto Visual Studio e caricato nuovamente il progetto, Test Explorer dovrebbe contenere nuovamente i test


Per me non funziona. Sto usando Visual Studio 2013 Express con l'installazione dell'aggiornamento 5 di recente. Ancora nessun test unitario appare.
miguelbgouveia,

Questo è stato anche quello che lavoratore per me. Ha anche funzionato senza riavviare Visual Studio. Le ore scorse finalmente.
Stephan Ryer,

Questa directory non esiste più in VS2017.
Noel Widmer,

Grazie funziona per me per tutti quelli che questa cartella può avere una versione diversa a seconda dell'installazione di Visual Studio come per me è%LocalAppData%\Microsoft\VisualStudio\16.0_03b7a93c\ComponentModelCache
Ravi Kumar Mistry

12

Gli utenti di XUnit potrebbero notare che la finestra Esplora test non elenca più alcun test. Per rendere di nuovo rilevabili i test, prova questo importante suggerimento , evidenziato di seguito.

Se riscontri problemi nel rilevare o eseguire i test, potresti essere vittima di una cache del corridore danneggiata all'interno di Visual Studio. Per cancellare questa cache, chiudere tutte le istanze di Visual Studio, quindi eliminare la cartella% TEMP% \ VisualStudioTestExplorerExtensions. Assicurati inoltre che il tuo progetto sia collegato solo a una singola versione del pacchetto NuGet di Visual Studio Runner (xunit.runner.visualstudio).

Digitare TEMP per trovare la cartella di destinazione


Questo non ha funzionato per me. Test explorer non trova il mio test e per quanto ne so non sto facendo un errore e ho provato alcune delle soluzioni qui senza successo.
Skychan,

Usando MsTestV2 - questa era l'unica cosa che risolveva il problema
Nathan

5

Per i futuri googler ho avuto uno scenario raro che ha causato questo.

Sulla mia classe di test di base avevo una proprietà chiamata TestContext. Ciò ha interferito con la proprietà TestContext riservata di MSTest, causando la nascondere tutti i miei test da VS / Resharper tranne uno (che non ha ereditato dalla base).


1
anche a me! ho dimenticato di rendere la proprietà del contesto di test public.
escape-llc,

4

per me stava cambiando le "configurazioni della soluzione" in Debug (invece che in Release).


4

Il mio problema era perché il mio metodo di test unitario non era nullo e riceveva parametri.


Di tutte le cose ... Questo era il mio problema e il bit params ha senso. Dopotutto, cosa dovrebbe sapere il sistema di test? La soluzione è quella di creare un metodo di prova in cui si chiama manualmente il metodo che si desidera verificare. Se stai testando un progetto WebAPI e hai un parametro Get with params, devi comunque avere la chiamata Get corrispondente ma non verrà visualizzata in Explorer.
MetalPhoenix,

4

Ho scoperto che i metodi di unit test contrassegnati come async voidnon sono stati scoperti da VS Test Explorer. Ciò sembra essere dovuto al fatto che VS non avrebbe alcun modo di attendere il completamento di un test e decidere se ha avuto esito positivo o meno. Se è assolutamente necessario disporre di un metodo di prova per l'esecuzione in modo asincrono, farlo restituire un'attività come invece async Task. Ho scoperto che questo ha risolto il problema per me.


1
Questo non risponde alla domanda sopra, ma questo è esattamente il problema che stavo cercando di risolvere. Quindi hai avuto un incidente +1 :) Grazie mille!
CF

3

Prova a creare tutti i progetti come MSIL (qualsiasi CPU) anziché x86 / x64. Ha funzionato per me in modo strano


Ho dovuto solo costruire il progetto Test usando Any CPU, gli altri progetti sono rimasti x64
Eduardo Brites,

1
Tecnicamente, C # / VB.NET si compila sempre in MSIL. L'impostazione del progetto "x86", "x64" o "Any CPU" (e, nelle versioni più recenti, "Prefer 32-bit") è solo flag nella parte superiore di EXE / DLL. Il punto è ancora fermo; NUnit non elencherà i test che non è possibile caricare nel motore di esecuzione, in quanto contrassegnati come richiedenti l'esecuzione di una particolare architettura.
Jonathan Gilbert,

3

Mentre la soluzione di AndyG funziona, una soluzione più duratura potrebbe essere quella di impostare la variabile d'ambiente PreferredToolArchitecture su "x64", sia:

Come fare in modo che Visual Studio usi la toolchain nativa amd64

o da:

  • Pannello di controllo | Sistema e sicurezza | Sistema | Impostazioni di sistema avanzate | Variabili d'ambiente
  • PreferredToolArchitecture = x64
  • DefaultToolArchitecture = Native64Bit
  • PROCESSOR_ARCHITECTURE = x64
  • ProcessorArchitecture = x64

2

Stavo affrontando lo stesso problema e ho ricordato, ancora una volta (questa situazione è accaduta in precedenza), che la selezione di "Piattaforma mista" nel menu della piattaforma delle soluzioni funziona, così come le altre risposte.


Ma dov'è il menu della piattaforma delle soluzioni? È in Visual Studio? Sto usando Visual Studio Express 2013 per Web e non riesco a trovare quel menu.
miguelbgouveia,

2

Ero riuscito ad aggiungere il mio come

public static void TestMethod1(){}

ha iniziato a funzionare una volta rimosso statico ....



1

vai al menu del progetto> Configuration Manager controlla che la piattaforma del tuo progetto di test corrisponda al resto del progetto ed è controllare per compilare e poi ricostruire.


1
Non ho alcuna opzione di Configuration Manager nel menu del mio progetto. Posso solo trovare l'opzione delle proprietà del progetto. Sono la piattaforma del progetto di unit test ed è la stessa degli altri progetti. Quindi, per me questa soluzione non funziona.
miguelbgouveia,

Definisci "corrisponde al resto del progetto"
riunisci il

1

Mi sono appena imbattuto in questo e non ho visto un caso simile simile al mio.

Nel .csprojfile del mio progetto di test, la privacy di riferimento di NUnit era impostata su 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>

Dopo ho impostato <Private>a Trueha funzionato.


1

Devi solo installare questo pacchetto:

NUnit TestAdapter NUnit TestAdapter


Sapevo che l'uso di un altro framework di unit test risolverà il mio problema. Ma se volessi continuare a utilizzare il framework Microsoft Unit Tests che non è una soluzione.
miguelbgouveia,


1

Ho avuto lo stesso identico problema.

Era dovuto alla versione incompatibile di NUnit che avevo aggiunto al mio progetto (3.2.0) e all'adattatore di test che avevo installato (2.0.0).

Per risolvere, usa "Strumenti> Estensioni e aggiornamenti" e cerca NUnit3 Test Adapter, dopo ho scoperto i miei test.

Saluti


Non sto usando NUnit.
miguelbgouveia,

1

Diciamo solo per l'argomento che è necessario utilizzare l'architettura X64 sul progetto di test affinché le dipendenze si costruiscano correttamente (come nel mio caso). Potrebbe essere necessario modificare l'architettura del processore predefinita nel menu Test - Impostazioni test . L'impostazione su X64 ha consentito al mio esploratore di test di trovare i miei test utilizzando Microsoft.VisualStudio.TestTools.UnitTesting.


1

Ci scusiamo per l'aggiunta alla lunga lista, ma ho avuto un problema completamente diverso. Innanzitutto, vorrei menzionare che ho scoperto il mio problema facendo clic su "Esegui tutto" in Esplora test e quindi guardando la finestra di output della generazione in Visual Studio. Devi guardarlo attivamente, poiché in seguito il messaggio scompare.

Per quanto riguarda il problema, sembra che durante la scansione dei test, la DLL venga caricata e i suoi tipi di test vengano elencati. Ciò provoca il caricamento dei riferimenti e se si verificano errori durante questo processo, i test non verranno mostrati in Explorer. Ho avuto due problemi che impediscono il corretto caricamento della DLL di prova:

  • Nel file di configurazione era ancora presente un reindirizzamento vincolante (reindirizzamento a una versione di versione inferiore NHiberate rispetto a quella a cui si faceva riferimento nel progetto di test).
  • Un riferimento di assieme in conflitto (riferimenti di secondo livello non in grado di caricare). AsmSpy è un ottimo strumento per cacciarli .

Stavo affrontando lo stesso problema, ho avuto difficoltà a trovare quali dll non stavano caricando ....
Amarnath Chatterjee

1

Se si carica una soluzione Visual Studio (VS 2015 Community nel mio caso) da una condivisione di rete o da una directory Documenti che fa parte di una condivisione , si verificherà questo problema. L'ho risolto spostando la soluzione e i suoi progetti sottostanti in una cartella locale.


1

Dopo aver trascorso 2 giorni ... nessuno dei precedenti ha funzionato per me. L'unica "soluzione" era: Vai alle proprietà del progetto -> Scheda Costruisci. Quindi fare clic sul pulsante Avanzate nell'angolo in basso a destra del riquadro. Modifica "Informazioni debug:" su "completo" e fai clic su OK.

Ecco le schermate: inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagineinserisci qui la descrizione dell'immagine


0

Mi sono imbattuto nello stesso problema. E indagato e scoperto che le DLL non sono state compilate, e messo nella cartella giusta. appena ho cambiato la mia configurazione sono apparsi. - le opzioni di creazione di progetti, quale cartella deve essere utilizzata? - la voce build menu build build, devono essere verificati.

questo l'ha risolto per me.


Per me, anche le DLL per i test non sono state costruite perché Visual Studio non trova alcun test definito. Sto usando Visual Studio Express e non ho la voce di menu Genera. Ma nel mio gestore della configurazione ho verificato tutte le opzioni di compilazione. Quindi, penso che non sia il problema per il mio caso.
miguelbgouveia,

@miguelbgouveia, è il contrario - VS crea DLL e quindi scansiona quelle per i test. Pertanto, se non si dispone di DLL del progetto di test, non si troveranno sicuramente test.

0

Per Visual Studio 2013.5, è stata utile cancellare la directory \ TestResults nella soluzione. Visual Studio ha corrotto il file mdf in cui memorizza i test rilevati, impedendo così il rilevamento di unit test.


1
È nella soluzione del tuo progetto. Fare clic con il tasto destro del mouse sul file di progetto in Esplora soluzioni -> Apri cartella in Esplora file. Vai da una directory da lì ed elimina la directory / TestResults. Potrebbe essere necessario chiudere Visual Studio per eliminare tutto. Ricostruirà la directory alla successiva apertura del progetto.
MartijnK,

0

Assicurati che tutti i tuoi progetti vengano eseguiti con la stessa configurazione. Sotto Proprietà => Debug => Piattaforma nell'elenco a discesa, seleziona la piattaforma appropriata (per me era "Qualsiasi CPU") come determinato negli altri tuoi progetti.


0
  • So che i test unitari non si trovano se la soluzione non è stata creata, quindi è qualcosa da provare (Build the solution), ma quella soluzione è come l'help desk che chiede se il computer è collegato ...
  • Dopo che una ricostruzione pulita non ha risolto il problema per me, l'esecuzione di una build batch completa l'ha risolto.

0

Aveva lo stesso problema; i test improvvisamente hanno smesso di essere scoperti.

Nunit Test Adapter era diventato in qualche modo disabilitato. Facendo clic su Attiva nel gestore estensioni è stato risolto per me.


0

Ho avuto lo stesso problema fino a quando ho capito di aver fatto un errore di taglia / incolla e ho lasciato fuori [Test Method]prima del test.


Questo è già successo a me. Ma in questo non è così.
miguelbgouveia,
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.