2010-10-01 3 views
5

sto ottenendo l'eccezioneMOQ 4.0: L'inizializzatore di tipo per 'Moq.Mock`1' ha generato un'eccezione

L'inizializzatore di tipo per 'Moq.Mock`1' ha generato un'eccezione.

utilizzando Moq 4.0 Ho controllato su un paio di forum e si allude ad utilizzare la versione Moq-NoCastle. Ho provato sia questa che la versione nella cartella Moq. Entrambi con lo stesso risultato.

Ho una soluzione con 2 progetti, uno per la mia interfaccia, uno per i miei test. Il mio progetto principale dispone di 2 file:

IMyInterface.cs:

using System; 

namespace Prototype 
{ 
    public interface IMyInterface 
    { 
     int Value { get; set; } 
     void ProcessValue(); 
     int GetValue(); 
    } 
} 

Il mio file Program.cs ha appena il codice predefinito che viene generato con il progetto.

Il mio progetto di test ha un unico file per il mio test dummy - TestProgram.cs

using System; 
using NUnit.Framework; 
using Moq; 

namespace Prototype.UnitTests 
{ 
    [TestFixture] 
    public class TestProgram 
    { 
     Mock<IMyInterface> mock; 

     [TestFixtureSetUp] 
     void TestSetup() 
     { 
      mock = new Mock<IMyInterface>(); 
      mock.Setup(x => x.GetValue()).Returns(2); 
     } 

     [Test] 
     public void RunTest() 
     { 
      IMyInterface obj = mock.Object; /* This line fails */ 
      int val = obj.GetValue(); 
      Assert.True(val == 2); 
     } 
    } 
} 

Secondo la documentazione tutto è buono e corretto, e si compila bene. Il problema si presenta quando provo a eseguire il test. Si raggiunge la linea marcata sopra e si blocca con l'eccezione:

L'inizializzatore di tipo per 'Moq.Mock`1' ha generato un'eccezione.

Non riesco a vedere cosa sta succedendo qui, qualcuno può far luce su di esso?

risposta

4

sono stato in grado di eseguire il test con successo dopo aver apportato le seguenti modifiche:

  1. made TestSetup() pubblico
  2. In RunTest, cambiato int val = obj.Value-int val = obj.GetValue() - questo è stato solo per ottenere il Assert di passare.

Non ho familiarità con NUnit (io uso xUnit), ma la mia ipotesi è che TestSetup() sia privato era il problema. Quando questo metodo è privato, NUnit mostra questa eccezione per me:

Prototype.UnitTests.TestProgram.RunTest: 
Invalid signature for SetUp or TearDown method: TestSetup 

Forse si utilizza una versione precedente di NUnit che ha gestito questa situazione in modo diverso (Ho appena scaricato 2.5.7.10213).

HTH

+0

Grazie. Sembra che l'accessor "pubblico" debba essere impostato sul setup. Quello che non riuscivo a capire era quando ho usato il debugger per eseguire il debug del test, in realtà ha funzionato con quel metodo. Quindi la mia ipotesi era che non fosse necessario essere pubblici. – BenAlabaster

+0

Prego.Sembra che NUnit si stia comportando in modo strano e non sta dando un buon feedback. –

2

Questo si è verificato a me quando ho aggiornato il Castle.Core NuGet pacchetto alla versione 4.0.0. Qualcosa che è cambiato non funziona correttamente con l'ultimo Moq (v4.5.30) in questo momento.

Ho risolto questo tornando al Castle.Core versione 3.3.3.