Moq DbSet NotImplementedException

Ho un Moq DbSet che ha funzionato fino a poco tempo fa, tuttavia dall’ultimo aggiornamento delle dipendenze continua a lanciare NotImplementedException su IQueryable.Provider

Codice usato come segue:

 var mockSet = new Mock<DbSet>(); var list = new List(); var queryable = list.AsQueryable(); mockSet.As<IQueryable>().Setup(m => m.Provider).Returns(queryable.Provider); mockSet.As<IQueryable>().Setup(m => m.Expression).Returns(queryable.Expression); mockSet.As<IQueryable>().Setup(m => m.ElementType).Returns(queryable.ElementType); mockSet.As<IQueryable>().Setup(m => m.GetEnumerator()).Returns(() => queryable.GetEnumerator()); var f =mockSet.Object.FirstOrDefault(); // NotImplementedException thrown here 

L’eccezione generata come segue:

 System.NotImplementedException The member 'IQueryable.Provider' has not been implemented on type 'DbSet`1Proxy_1' which inherits from 'DbSet`1'. Test doubles for 'DbSet`1' must provide implementations of methods and properties that are used. 

È probabile che tu stia usando la versione 4.7.58 di Moq. Quella particolare versione era influenzata da una regressione che avrebbe triggersto tale NotImplementedException . Questa regressione è stata risolta nella versione 4.7.63, quindi ti suggerisco di aggiornare il riferimento del pacchetto Moq alla versione 4.7.63 o successiva per risolvere questo problema.

Il fatto che il tuo codice avrebbe funzionato nelle versioni di Moq prima di 4.7.58 era dovuto a una “funzione” che purtroppo ha causato molti più problemi di quanti ne abbia risolti. Per questo motivo, quella funzione è stata ripristinata .

Moq è stato riportato al suo comportamento originale, in cui, in questo particolare scenario, è necessario configurare i vari membri dell’interfaccia tramite mock.As prima della chiamata a mock.Object . (Di solito, in Moq, è perfettamente ansible eseguire ulteriori impostazioni anche dopo aver recuperato l’object mock, questo scenario è un’eccezione notevole. Speriamo che questo possa essere risolto in una versione futura di Moq.)

Il rollback di Castle.Core a 4.0.0 e Moq all’ultima versione che supporta 4.0.0 ha risolto il problema. Mi sto ancora chiedendo se c’è qualcosa che ho perso che avrebbe risolto questo problema nella nuova versione.