2010-02-01 16 views
6

ho un metodo privato che dovrebbe restituire true.I m utilizzando NUnit e MOQ Così ho come segue:Come posso affermare/verificare un metodo protetto da Moq?

[TestFixture] 
public class CustomerTestFixture 
{ 
    var customerMock=new Mock<ICustomer>() 
    customerMock.Protected().Setup<bool>("CanTestPrivateMethod").Returns(true); 

    // How do I assert it now since I cannot do 
    customerMock.Verify //Verify does not exists. 
} 

non ho trovato nulla su google che spiega come per testarlo. come puoi vedere posso fare un set up ma non posso affermarlo.

Mi manca l'ovvio? Molte grazie.

risposta

3

Non si desidera testare un metodo su una simulazione. Vuoi testare il metodo su un'istanza della classe effettiva. Il modo per test a private method su una classe è utilizzare un accessorio. Nota che VS fornirà questi automaticamente per te, oppure puoi "rotolare i tuoi" usando la riflessione. Per un metodo interno, è anche possibile impostare InternalsVisibleTo sul progetto di test nel file AssemblyInfo.cs.

[TextFixture] 
public class CustomerTestFixture 
{ 
    var customer = new Customer(); 
    var accessor = new Customer_Accessor(new PrivateObject(customer)); 

    Assert.IsTrue(accessor.CanTestPrivateMethod()); 

} 

Quando si deridere un oggetto, l'intento è che l'oggetto viene utilizzato come una dipendenza per la classe reale in prova. Pertanto, è sufficiente essere in grado di configurare l'oggetto fittizio per restituire valori specifici. Stai facendo le tue asserzioni sulla classe che usa la dipendenza, non sulla classe di simulazione. La fase di verifica assicura che la classe in prova abbia definito i metodi sugli oggetti fittizi in base alle aspettative che hai stabilito.

+0

Grazie per la risposta. Voglio il mio mock up object.CanTestPrivateMethod per restituire valori specifici. Quindi se ho hardcode "return true" nel mio metodo privato. Posso ancora affermarlo? Dal mio punto di vista non dovrei assolutamente provare un metodo privato, ma il mio collega insiste su questo. Quindi sto solo cercando di capire come farlo usando MOQ. – user9969

+1

Ti manca il mio punto. Non prendere in giro l'oggetto sotto test. Solo deriderne le dipendenze. Creare un'istanza reale, impostare le condizioni in modo che il metodo privato debba restituire un valore specifico, quindi utilizzare l'accessor per verificare che il metodo restituisca effettivamente tale valore. L'unica necessità per i mock sarebbe se l'istanza avesse alcune dipendenze che dovresti usare nel tuo metodo privato. – tvanfosson

+0

Grazie per il vostro tempo e la risposta. Ho capito il punto ora. – user9969

Problemi correlati