2015-01-22 20 views
5

Sto avendo una classe "Esempio" con un "dati" proprietà che ha un setter privato e vorrei prendere in giro che la proprietà dei daticome per deridere una proprietà con setter privata utilizzando NSubstitute

Public class Example { public string data {get; private set;}} 

avrei piace prendere in giro la proprietà dei dati usando NSubstitute. Qualcuno potrebbe aiutarmi a farlo.

+1

Probabilmente non è possibile - la maggior parte delle librerie beffardi non sono in grado di prendere in giro non virtuali, i metodi non-interfaccia. A meno di riprogettare le tue lezioni avrai bisogno di uno strumento più pesante che può riscrivere codice come [Microsoft Moles] (https://msdn.microsoft.com/en-us/library/ff798308.aspx). –

+0

Potrebbe valere la pena notare se è possibile modificare la classe 'Example'. Come notato da @AlexeiLevenkov, se non è possibile, NSub non può aiutarti. Se puoi, la risposta di @ JohnKoerner mostra un modo per farlo. –

risposta

11

NSubstitute può solo simulare i metodi abstract o virtual per le classi concrete. Se si riesce a modificare il codice sottostante per usare un'interfaccia, allora si potrebbe prendere in giro l'interfaccia:

public class Example : IExample { public string data { get; private set; } } 
public interface IExample { string data { get; } } 

[TestMethod] 
public void One() 
{ 
    var fakeExample = NSubstitute.Substitute.For<IExample>(); 
    fakeExample.data.Returns("FooBar"); 

    Assert.AreEqual("FooBar", fakeExample.data); 
} 
+0

Fare in modo che 'Example.data' virtual funzioni anche per questo test senza aggiungere l'interfaccia. (Anche se generalmente preferisco le interfacce per il mocking basato su proxy dinamico.) –

+0

I suoni sono corretti, ma sono stato in grado di usare substitute.Received (1) .Method() dove Method non è astratto o virtuale. –

Problemi correlati