Utilizzo Visual Studio 2015 Enterprise RTM per scrivere test di unità per un progetto che utilizza Unity Container.Visual Studio 2015 InvalidProgramException in Unit Test con Fakes
ho scoperto che il semplice atto di aggiunta di un gruppo di falsi per l'unità, nemmeno in realtà utilizzando il falso, è sufficiente a generare questa eccezione:
System.InvalidProgramException: Common Language Runtime rilevato un programma non valido.
considerare i seguenti passaggi per riprodurre:
Utilizzando Visual Studio 2015 Enterprise RTM creare un progetto di prova Unità di mira .NET 4.6
Aggiungere il pacchetto NuGet "Unità" versione 3.5.1404.0
Aggiungere il pacchetto NuGet "CommonServiceLocator" versione 1.2.0
Scrivi un singolo test di unità in questo modo:
[TestClass]
public class UnitTest1 : IDisposable
{
[TestMethod]
public void TestMethod1()
{
new ResolvedArrayParameter<IDisposable>(new IDisposable[] {this});
}
void IDisposable.Dispose()
{
}
}
Verificare il test viene superato
Fare clic destro sul Microsoft.Practices.Unity di riferimento e scegliere " Aggiungi gruppo di falsi "
nuovamente eseguire il test
osservare le seguenti notevole fallimento del test:
Nome test: TestMethod1
StackTrace
prova FullName: UnitTestProject11.UnitTest1.TestMethod1
Fonte prova: c: \ temp \ UnitTestProject11 \ UnitTestProject11 \ UnitTest1.cs: linea 12
test Risultato: Impossibile
prova Durata: 0: 00: 00,0572447Risultato:
a Microsoft.Practices.Unity.ResolvedArrayParameter..ctor (tipo arrayParameterType, Tipo elementType, oggetto [elementValues])
a Microsoft.Practices.Unity.ResolvedArrayParameter`1..ctor (Object [ ] elementValues)
a UnitTestProject11.UnitTest1.TestMethod1() in c: \ temp \ UnitTestProject11 \ UnitTestProject11 \ UnitTest1.cs: linea messaggio Risultato 13
:
metodo di prova UnitTestProject11.UnitTest1.TestMethod1 gettato un'eccezione:
sistema. InvalidProgramException: Common Language Runtime ha rilevato un programma non valido.
La caratteristica più straordinaria di questo problema è evidentemente falsi non hanno nemmeno bisogno di apparire direttamente nel codice per il fallimento di manifestare.
una vasta quantità di giocherellare rivela che retargeting il progetto di test per .NET 4.5 "correzioni" il problema, che è un non-starter per me, perché di another problema Ho pubblicato alcune settimane fa.
Ancora più giocherellando con praticamente tutte le impostazioni dei falsi (contratti di codice, ecc.) Non ha prodotto alcuna soluzione.
Qualsiasi consiglio su questo argomento sarebbe molto apprezzato.
Avvia una taglia, perché incontriamo lo stesso 'InvalidProgramException' quando usiamo' ShimLocalPrintServer.Constructor ... 'per testare un metodo che istanzia un' System.Printing.LocalPrintServer'. Un 'UnityContainer' non è necessario per riprodurre questo errore. E il ripristino del framework non ha aiutato. L'eccezione viene sollevata quando il metodo testato chiama 'new LocalPrintServer (nuova stringa [0], PrintSystemDesiredAccess.EnumerateServer);' –
Hai visto questa domanda simile? http: // StackOverflow.it/questions/14578355/system-invalidprogramexception-when-executing-unit-tests-in-mstest-after-microso – BlakeH
Perché non hai ancora installato Visual Studio Update 1? – CSharpie