2014-11-19 15 views
12

Ho la seguente semplice caso di test:Forzare console NUnit corridore di utilizzare CLR 4.5

var uri = new Uri("http://foo.com/bar%2Fbaz"); 
Assert.AreEqual("http://foo.com/bar%2Fbaz", uri.AbsoluteUri); 

Questo test ha esito negativo in .NET 4 ma passa .NET 4.5, posso provare questo utilizzando il test corridore ReSharper che fornisce un pratico menu di selezione CLR.

Ma se ho eseguito questo test utilizzando console NUnit corridore come la seguente:

NUnit-console.exe /framework:4.5 "C: \ Data \ Progetti \ Uritest \ bin \ Debug \ UriTest.dll"

I miei test falliscono. Ho anche modificato NUnit-console.exe.config e ha aggiunto questo:

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 

e dopo l'aggiunta di questo, ho iniziato a ottenere questo output da corridore:

Runtime Environment - 
    OS Version: Microsoft Windows NT 6.2.9200.0 
    CLR Version: 4.0.30319.34209 (Net 4.5) 

ProcessModel: Default DomainUsage: Single 
Execution Runtime: v4.5 

Ma ancora la mia prova fallisce. Qualche idea del perché accada questo?

+0

Hai mai trovato una soluzione? Sto colpendo esattamente lo stesso problema ... –

+0

Posso riprodurre con NUnit 2.6.4. Ho anche provato a forzare NUnit 3 ad usare 4.0 ma il mio test è scaduto ... –

risposta

8

Dopo aver dato uno sguardo più approfondito al problema, ecco le informazioni che ho raccolto da diversi forum.

Innanzitutto, rileva automaticamente il tempo di esecuzione. Se non lo fa (che sembra essere il tuo caso), puoi sempre forzare il framework usando il runtime appropriato usando l'opzione di comando/framework.

Ciò che si ha in nunit-console.exe.config forza il runner NUnit a utilizzare il runtime specificato. Se il tuo assembly si trova in una versione .NET diversa, NUnit eseguirli in un processo separato per forzare la versione del framework.

Vedere documentation for NUnit 2.6.2.

Cosa avete nella vostra linea di comando non dovrebbe essere /framework:4.5 ma piuttosto /framework:net-4.5

Il passo successivo sarebbe quello di dare un'occhiata al tuo test e vedere se c'è qualcosa di specifico che lo fa fallire.

Si prega di commentare un po 'di più per maggiori informazioni.

+0

Grazie per la risposta, ma questo non sembra funzionare. In primo luogo, clr.bat non viene fornito con NUnit 2.6.3 e la nuova documentazione non lo menziona. Inoltre, i vecchi documenti dicono "Nota: se si utilizza una sezione nel file di configurazione, ha la precedenza su questa opzione." che è praticamente quello che ho fatto con il file .exe.config. – huseyint

+0

Aggiornato la mia risposta. –

+1

Ancora non funziona con /framework:net-4.5 switch. Puoi riprodurlo facilmente: 1. Crea un progetto DLL con questo [Test] usando .NET 4.5.2 2. Costruilo 3. Eseguilo tramite nunit-console (o la GUI di nunit per quella materia) – huseyint

0

In .NET 4.0 Framework si è verificato un errore relativo alla codifica dei valori di barra. Puoi controllare la descrizione here. In 4.5 è stato corretto per rendere il risultato conforme a RFC-3986. Quindi, ecco perché hai un comportamento diverso per 4.0 & 4.5.

+0

Sì, sono a conoscenza del cambiamento, il problema che ho è con i runner di test di nunit che sembrano funzionare con .NET 4 anche se provo a forzarli a usare .NET 4.5 – huseyint

+0

@huseyint, stai costruendo la tua soluzione contro 4.5 prima di eseguire i test? – ialekseev

+0

Sì, la mia soluzione è costruita specificamente su .NET 4.5.2. – huseyint