2013-03-16 15 views
8

Quando il debug del codice e leggere la riga con la creazione mockLessonplannerAFactory ottengo l'errore:argomenti del costruttore non può essere superato per l'interfaccia deride

Constructor arguments cannot be passed for interface mocks.

var mockSchoolclassCodeService = new Mock<ISchoolclassCodeService>(); 
var mockDateService = new Mock<IDateService>(); 
var mockLessonplannerAFactory = new Mock<ILessonplannerAFactory>(mockDateService.Object); 
var mockLessonplannerBFactory = new Mock<ILessonplannerBFactory>(mockDateService.Object); 

var service = new TimeTableService(mockUnitOfWork.Object, mockLessonplannerAFactory.Object, mockLessonplannerBFactory.Object, mockSchoolclassCodeService.Object); 

mio TimeTableService accetta le istanze di solo un tipo di interfaccia. Ma mockLessonplannerAFactory e BFactory ... vogliono nel loro costruttore anche un IDateService passato.

Cosa c'è di sbagliato nel mio codice?

risposta

7

L'indizio è nel messaggio di errore "Gli argomenti del costruttore non possono essere passati per le interfacce".

Il mock creato dall'interfaccia avrà un costruttore predefinito perché le interfacce non hanno un costruttore. Ricorda che stai prendendo in giro l'interfaccia non la classe concreta.

"Ma il mockLessonplannerAFactory e BFactory ... vogliono nel loro costruttore anche un IDateService passato."

Sono entrambi presi in giro dalle interfacce, quindi non esiste un costruttore. La classe mock creerà un costruttore predefinito che non ha bisogno di essere passato nulla.

+0

sì ho appena realizzato rimuovendo il passaggio del mockDateService.Object che tutto funziona bene. – Elisabeth

+0

Questo non risolve il problema reale, come modificherebbe la configurazione di simulazione –

+0

Il mockLessonPlanAFactory e mockLessonPlanBFactory non hanno bisogno dei parametri del costruttore. Qualsiasi metodo o proprietà che hanno che usano gli oggetti normalmente passati nel costruttore dell'implementazione concreta sono essi stessi metodi/proprietà fittizi e li si imposta per restituire un valore appropriato (altrimenti non si sta veramente prendendo in giro questi oggetti). Si impostano i metodi e le proprietà in base alle proprie esigenze. –

Problemi correlati