2013-07-01 16 views
5

Devo usare nunit-console per eseguire tutti i test nella mia soluzione.nunit-console "impossibile caricare file o assembly" utilizzando MySolution.sln

ho fatto questo:

c:\some\path>nunit-console-x86.exe MySolution.sln 
NUnit-Console version 2.6.2.12296 
Copyright (C) 2002-2012 Charlie Poole. 
Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov. 
Copyright (C) 2000-2002 Philip Craig. 
All Rights Reserved. 

Runtime Environment - 
    OS Version: Microsoft Windows NT 6.1.7601 Service Pack 1 
    CLR Version: 2.0.50727.5466 (Net 3.5) 

ProcessModel: Default DomainUsage: Default 
Execution Runtime: net-3.5 
Could not load file or assembly 'MyNamespace.Administration, Version=0.0.0.1, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified. 

Così, ho deciso di provare nunit-x86.exe ho fatto File > Open Project > MySolution.sln e ottenuto questo:

--------------------------- 
NUnit 
--------------------------- 
Test load failed! 

System.IO.FileNotFoundException : Could not load file or assembly 
'MyNamespace.Administration, Version=0.0.0.1, Culture=neutral, 
PublicKeyToken=null' or one of its dependencies. The system cannot 
find the file specified. 

For further information, use the Exception Details menu item. 
--------------------------- 
OK 
--------------------------- 

The exception can be found here

Quello che sta accadendo e come fare Lo aggiusto? (senza la necessità di mantenere un file di MySolution.nunit)

Maggiori informazioni

  • MyNamespace.Administration non è nemmeno una delle DLL che contiene le prove, il che significa che non riesce NUnit cercando di caricarlo per cercare test da eseguire. Sapendo questo ho modificato il file creato da nunit-x86.exe (MySolution.nunit) e rimosso tutte le DLL che non avevano test. Abbastanza sicuro, i test funzionano (sia in gui che in console). Questo non è accettabile per me perché significherebbe che devo conservare ancora un altro file di configurazione. Nunit che supporta i file .sln avrebbe dovuto evitare questo.
  • miei test funzionano bene con TestDriven.Net (ma ho davvero bisogno di eseguire utilizzando NUnit-console)
  • Ho guardato this answer ma non riesco a dare un senso a ciò che dice il visualizzatore di log di fusione. Pubblicherebbe quel registro di aiuto? Assemblea vincolante Log Viewer, elenca 3 file creati:
    • NUnit-agent-x86.exe, questa sembra essere cercando di trovare MyNamespace.Administration.dll/EXE inside the nunit directories
    • Tests_24398275 x2 - una ricerca di nunit.core nelle mie cartelle di progetto e un altro cercando unit.core.interfaces all'interno delle mie cartelle di progetto. Farei poca attenzione a questi due poiché essi appaiono anche nel mio progetto .nunit modificato manualmente).
  • (per commento andreister) Il problema sembra essere relativo al progetto/assieme stesso e non al metodo di creazione. Se creo un progetto .nunit e provo ad aggiungere MyNamespace.Administration (usando 'Aggiungi assieme ...' o 'Aggiungi VS progetto ...') fallisce.
  • Chiamare nunit-console-x86 somepath/bin/Debug/MyNamespace.Administration.dll funziona direttamente.
+0

Apparentemente, 'MyNamespace.Administration.dll' contiene il codice utilizzato dai test. Sei sicuro di non aver dimenticato, per esempio, di mettere "CopyLocal = True" quando fai riferimento al progetto? – andreister

+0

Si fa riferimento a un progetto di test (dll), ma quel progetto funziona quando utilizzo MySolution.nunit, il che mi porta a credere che fallisca davvero il tentativo di caricare quel progetto solo per vedere se ha dei test (lo presumo apre i progetti per vedere quali hanno dei test). –

+0

Che ne dici di aggiungere quel progetto in ".nunit' esplicitamente, per vedere se fallirebbe? Normalmente per un progetto di non test NUnit riporta solo che non ha test. – andreister

risposta

3

Sfortunatamente, anche dopo la pubblicazione su nunit-discuss group non sono riuscito a trovare una soluzione adeguata per questo problema.

nunit-discuss group ha confermato che i miei test non funzionano a causa di una dipendenza di livello superiore.

Tuttavia, ho trovato una soluzione accettabile.

Poiché chiamare direttamente i .dll s non ha avuto gli stessi problemi. Potrei farlo con globs, ma sono su Windows ... ma ho git bash installato.

Approfittando della mia struttura del progetto un po 'rigida e la convenzione di denominazione sono riuscito a fare questo:

"C:\Program Files (x86)\Git\bin\bash.exe" -c 'nunit-console-x86.exe //framework=net-4.5 //xml:nunitresults.xml MysolutionFolder/Tests/*/bin/Debug/*.Tests.dll' 

prega di notare che ho approfittato del mio convenzione di denominazione. Questo è molto importante da fare per ridurre il numero di argomenti.

Quando ho fatto nunit-console-x86 MysolutionFolder/*/*/bin/Debug/*.dll invece di MysolutionFolder/Tests/*/bin/Debug/*.Tests.dll ho ricevuto un errore da nunit-console-x86 dicendo Bad file number. Inoltre, è più veloce se fornisco i file giusti.

Se si dispone di una versione più recente di bash (4.0 +, credo) si può invece utilizzare il seguente comando (si noti l'uso di **):

"C:\Program Files (x86)\Git\bin\bash.exe" -c 'nunit-console-x86.exe //framework=net-4.5 //xml:nunitresults.xml MysolutionFolder/**/bin/Debug/*.Tests.dll' 

che è più breve e più permissiva sulla struttura del progetto.

5

rinnovo di mia risposta su NUnit-discutere:

La caratteristica NUnit di carico VS soluzioni è davvero piuttosto limitata e destinato a lavorare con progetti semplici o come un modo rapido per creare un file di progetto NUnit - vale a dire caricare la soluzione e salva come progetto NUnit, quindi modifica il file xml che è stato creato. Poiché il formato del file della soluzione non indica quali file sono test, NUnit tenta di caricare ciascun progetto per verificare se contiene test. (Questa è la stessa cosa di Visual Studio 2012 e versioni successive quando si utilizza la finestra di test explorer, btw.)

Come suggerisci, penso che il particolare assembly non riesca a caricare a causa di una dipendenza di livello superiore. Quando si carica un file di soluzione VS o un file di progetto NUnit, NUnit imposta la base dell'applicazione nella directory contenente la soluzione o il progetto. Ecco perché un file di progetto NUnit funziona a un livello alto.

L'intento dei progettisti in questo tipo di situazione è la creazione di un file di progetto NUnit. Riconosco che questo è un po 'scomodo, dal momento che ti dà un altro file di configurazione da mantenere. Sono aperto a suggerimenti riguardanti l'uso di globs sulla riga di comando o all'interno del file di progetto. Eventuali modifiche di questo tipo andrebbero probabilmente nel prossimo importante aggiornamento, NUnit 3.0.

+0

Personaly, un argomento di comando aggiuntivo che consente di indicare che i test dovrebbero essere eseguiti in ogni radice del progetto sarebbe bello. Per le soluzioni con dozzine di progetti, l'uso del file .sln è MOLTO conveniente, ma ci dovrebbe essere ancora un modo per garantire il file di configurazione e l'isolamento delle dipendenze. – MytyMyky

Problemi correlati