2010-04-22 2 views
14

Ricevo la seguente eccezione quando si tenta di eseguire i miei test dell'unità utilizzando .net 4.0 in VS2010 con moq 3.1.Un'eccezione di .net 4.0 strana quando si eseguono i test delle unità

Tentativo dalla sicurezza metodo trasparente 'SPPD.Backend.DataAccess.Test.Specs_for_Core.When_using_base.Can_create_mapper()' per accedere sicurezza metodo critico 'Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsNotNull (Sistema .Oggetto) ' non riuscito.

Assemblea 'SPPD.Backend.DataAccess.Test, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' è contrassegnato con il AllowPartiallyTrustedCallersAttribute, e utilizza la sicurezza modello di trasparenza di livello 2. Livello 2 trasparenza causa tutti i metodi negli assembly AllowPartiallyTrustedCallers per la sicurezza trasparente per impostazione predefinita, che può essere la causa di questa eccezione.

Il test Sono in esecuzione è veramente semplice e simile a quanto segue:

[TestMethod] 
    public void Can_create_mapper() 
    { 
     this.SetupTest(); 

     var mockMapper = new Moq.Mock<IMapper>().Object; 
     this._Resolver.Setup(x => x.Resolve<IMapper>()).Returns(mockMapper).Verifiable(); 

     var testBaseDa = new TestBaseDa(); 
     var result = testBaseDa.TestCreateMapper<IMapper>(); 

     Assert.IsNotNull(result); //<<< THROWS EXCEPTION HERE 
     Assert.AreSame(mockMapper, result); 

     this._Resolver.Verify(); 
    } 

Non ho idea di che cosa questo significa e ho cercato in giro e ho trovato molto poco sul tema . Il riferimento più vicino che ho trovato è questo http://dotnetzip.codeplex.com/Thread/View.aspx?ThreadId=80274 ma non è molto chiaro su cosa hanno fatto per risolverlo ...

Qualcuno ha qualche idea ??

risposta

4

MSDN: "La versione 4 di .NET Framework introduce nuove regole di sicurezza che influiscono sul comportamento dell'attributo AllowPartiallyTrustedCallersAttribute (vedere Codice di protezione trasparente, livello 2). In .NET Framework 4, tutto il codice predefinito è impostato su trasparente, ovvero parzialmente attendibile. Tuttavia, puoi annotare singoli tipi e membri per assegnare loro altri attributi di trasparenza. "

Non mi sono mai imbattuto in questo, ma forse avete importato qualcosa da un progetto 3.5.

Guarda anche questi link:

Security Changes in the .NET Framework 4

Security-Transparent Code, Level 2

AllowPartiallyTrustedCallersAttribute Class

+0

non credo che ho importato qualsiasi cosa, da un progetto esistente, come ho creato questa soluzione/progetto da zero in vs2010 ... L'eccezione generata è la variabile risultato che è un oggetto Moq creato dinamicamente ...Ho provato a utilizzare le ultime build di Moq per vedere se risolve i problemi, ma non lo ha fatto e per quanto ne so essi stanno ancora crescendo sotto 3.5 ... –

3

Questo è stato risolto nella versione più recente di Moq (era una correzione in DynamicProxy in realtà). Si prega di provare l'ultima beta v4.

http://moq.me

19

Nei AssemblyInfo.cs del progetto di riferimento aggiunge questa riga seguente

[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)] 
+5

Questo mi ha aiutato. –