2012-07-28 18 views
9

Ho una classeMettere un metodo su una classe invece dell'intera classe usando Moq?

public interface IMyInterface 
{ 
    string MethodA(); 
    void MethodB(); 
} 

public class MyClass : IMyInterface 
{ 
    public string MethodA() 
    { 
     // Do something important 
    } 

    public void MethodB() 
    { 
     string value = MethodA(); 
     // Do something important 
    } 
} 

voglio unit test MethodB, ma sto avendo difficoltà a pensare a come posso Mock MethodA, pur mettendo in MethodB utilizzando Moq. Moq deride l'interfaccia, non la classe, quindi non posso chiamare mock.Object.MethodB(), giusto?

È possibile? Se é cosi, come?

+1

Un'altra osservazione: in realtà usando Moq u può deridere la classe, ma ci sono alcuni requisiti sulle classi. La classe non può essere sigillata. e il metodo che viene deriso deve essere contrassegnato come virtuale. Inoltre, non può essere un metodo statico. – Artiom

risposta

4

non credo sia possibile. Anche se fosse possibile preferirei non farlo.

Si sta verificando il comportamento del MyClass, il fatto che capita di attuare IMyInterface è un po 'estranei a comportamenti sperimentazione di MethodA e MethodB. È possibile avere un test separato che si assicuri che la classe implementa interfacce che si prevede che implementino se necessario. Il test di MyClass.MethodB dovrebbe essere eseguito su istanza di MyClass, non su oggetto semi-mocked.

se si pensa che il comportamento di MethodA è la dipendenza che si può provare in realtà estrarlo in modo esplicito dalla classe. Permetterà di testare sia MethodA (che semplicemente delegherà alla dipendenza) che MethodB (che userà la dipendenza e farà di più).

1

dipendenze Mock non si può instanciate facilmente (o tutti).
MyClass è classe in prova, in modo da non dovrebbe essere preso in giro (non si vuole mettere alla prova i valori deriso).
Ma, se avete qualche MyClass.Foo proprietà che è di classe Foo che implementa l'interfaccia IFoo e MethodA utilizza questa proprietà Foo, allora si può prendere in giro a rompere la dipendenza.

Problemi correlati