2011-10-26 8 views
6

Sto provando a prendere in giro la classe SearchResultCollection. Tuttavia, quando si tenta di intercettare una chiamata al getter PropertiesLoaded, la mia prova genera un'eccezione:Moq C# integrato nella classe

System.NotSupportedException: Invalid setup on a non-virtual (overridable in VB) member: x => x.PropertiesLoaded 

My Code:

Mock<SearchResultCollection> searchResultMock = new Mock<SearchResultCollection>(); 

// Set up collection that will be returned 
string[] tempData = { "one", "two" }; 
searchResultMock.SetupGet(x => x.PropertiesLoaded).Returns(tempData); 

Qualcuno ha preso in giro con successo una classe come questa? La proprietà in questione ha solo un getter e non è virtuale.

// 
    // Summary: 
    //  Gets the System.DirectoryServices.DirectorySearcher properties that were 
    //  specified before the search was executed. 
    // 
    // Returns: 
    //  An array of type System.String that contains the properties that were specified 
    //  in the System.DirectoryServices.DirectorySearcher.PropertiesToLoad property 
    //  collection before the search was executed. 
    public string[] PropertiesLoaded { get; } 
+0

possibile duplicato di [? Perché non posso prendere in giro MouseButtonEventArgs.GetPosition() con Moq] (http://stackoverflow.com/questions/1918208/why-cant-i-mock-mousebuttoneventargs-getposition-with-moq) – TrueWill

risposta

8

Ho paura che non puoi.

Come hai detto che la proprietà non è virtuale. Un'altra opzione sarebbe stata prendere in giro l'interfaccia ma ho controllato e non ce n'è uno per questa classe (secondo il documento MSDN).

Ci sono altri framework di isolamento che possono farlo. Microsoft Moles è in grado di farlo, così è TypeMock.


Microsoft Moles: http://research.microsoft.com/en-us/projects/moles/

TypeMock: http://www.typemock.com/

+0

Sì, uno di questi quadri di isolamento funzionerebbe per questo. – scottheckel

2

Questo non è possibile con Moq. È possibile solo simulare interfacce, classi astratte e classi con metodi virtuali (e in quest'ultimo caso, è possibile utilizzare solo Setup() per deridere il comportamento dei metodi virtuali).

+0

In questo caso, sono obbligato a scrivere funzioni/oggetti proxy per intercettare le chiamate alle funzioni che desidero chiamare. Bummer. – MarkP

Problemi correlati